c++ - Qt编程QComboBox

标签 c++ qt qcombobox

我正在使用 QtC++ 向名为 EASYPAINT 的免费软件添加一些功能。

我必须添加一种更直观的方法,让用户可以直接从工具中看到实际宽度,而不是更改数字。 (就像在新的 windows paint 中一样,您可以在其中实际看到线条粗细而不是像素。)

我正在使用 QComboBox。我的问题是(先看代码),而不是有 20 个(penSizeList->addItem),我知道我们可以有 addItems....但是呢图标。对于每个 Item,我是否必须搜索 20 个不同的行 thickness.png 并添加它们?或者我可以使用其他方法吗?

还有,如何去掉addItem中的字符串,只保留QComboBox中的图片或图标。

QComboBox *penSizeList = new QComboBox();
penSizeList->setIconSize(QSize(100,100));
penSizeList->setStatusTip("Pen Size");

QIcon ONEpxIcon(":/media/actions-icons/clear-gray.png");
QIcon THREEpxIcon(":/media/instruments-icons/canvas-lines1.png");

penSizeList->addItem(ONEpxIcon,"1px");
penSizeList->addItem(THREEpxIcon,"2px");
penSizeList->addItem(THREEpxIcon,"3px");
penSizeList->addItem(THREEpxIcon,"4px");
penSizeList->addItem(THREEpxIcon,"5px");
penSizeList->addItem(THREEpxIcon,"6px");
penSizeList->addItem(THREEpxIcon,"7px");
penSizeList->addItem(THREEpxIcon,"8px");
penSizeList->addItem(THREEpxIcon,"9px");
penSizeList->addItem(THREEpxIcon,"10px");
penSizeList->addItem(THREEpxIcon,"11px");
penSizeList->addItem(THREEpxIcon,"12px");
penSizeList->addItem(THREEpxIcon,"13px");
penSizeList->addItem(THREEpxIcon,"14px");
penSizeList->addItem(THREEpxIcon,"15px");
penSizeList->addItem(THREEpxIcon,"16px");
penSizeList->addItem(THREEpxIcon,"17px");
penSizeList->addItem(THREEpxIcon,"18px");
penSizeList->addItem(THREEpxIcon,"19px");
penSizeList->addItem(THREEpxIcon,"20px");

connect(penSizeList,SIGNAL(activated(int)), this, SLOT(penValueChanged(int)));

最佳答案

尝试在循环中执行此操作。

penSizeList->addItem(ONEpxIcon,"1px");
for(int i = 2; i < 21 ; i++)
{
    penSizeList->addItem(THREEpxIcon,QString("%1px").arg(i));
}

或者如果每行有不同的图标:

for(int i = 1; i < 21 ; i++)
{
    penSizeList->addItem(QIcon(QString("iconLine%1.png").arg(i)),QString("%1px").arg(i));
}

如果你只想要图标,设置空字符串:

penSizeList->addItem(icon,"");

如果您想要完整图像,则应将此图像设置为背景。例如:

QPixmap pxmap("G:/2/qt.jpg");
QStandardItemModel *md = new QStandardItemModel;
QStandardItem *iii = new QStandardItem;
iii->setBackground(QBrush(Qt::red));
iii->setText("ss");
QStandardItem *iiii = new QStandardItem;
iiii->setBackground(QBrush(pxmap));
iiii->setText("ss");
md->setItem(1,0,iii);
md->setItem(0,0,iiii);
ui->comboBox->setModel(md);

关于c++ - Qt编程QComboBox,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26535618/

相关文章:

C++ 64 位时间戳到 32 位 time_t

qt - 检测鼠标光标何时位于 Qt5 和 QML 中的不规则形状图片上

调用构造函数时 C++/Qt 无法解析外部

c++ - 用c++解析海量数据

Python PyQt 根据用户在旋转框中选择的数量创建组合框

python - 使用新样式的信号和插槽组合框?

python - 单击按钮后如何更改组合框中的变量值?

c++ - 在 C++ 中可以对二进制数据执行什么类型的输入检查?

c++ - 检索流程创建时间的API(Linux)

c++ - 为什么 cmake add_dependencies 不适用于带有 CUDA 代码的库?