十一、QComboBox宽度偏小,如何显示全下拉文本项。
QComboBox *combo = new QComboBox(this);
combo->view()->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
combo->addItem("Combo box entry number 1");
combo->addItem("Combo box entry number 2");
combo->addItem("Combo box entry number 3");
combo->setMaximumWidth(45);
十二、QComboBox如何排序。
方法1: model(), 然后使用 void QAbstractItemModel::sort(int column, Qt::SortOrder order = Qt::AscendingOrder)进行排序
方法2:使用)QSortFilterProxyModel进行排序
十三、如何在QMainWindow 中菜单重定向 QWidget.
可以使用 QApplication::focusChanged()
十四、如何在QAbstractItemView中布局Icon和Text
class ListWidget : public QListWidget {
public:
ListWidget()
{
QListWidgetItem *item1 = new QListWidgetItem("one");
QListWidgetItem *item2 = new QListWidgetItem("two");
QListWidgetItem *item3 = new QListWidgetItem("three");
addItem(item1);
addItem(item2);
addItem(item3);
}
QStyleOptionViewItem viewOptions() const override
{
QStyleOptionViewItem item;
item.init(this);
item.displayAlignment = Qt::AlignRight;
return item;
}
};
十五、QWidget鼠标事件穿透
setAttribute(Qt::WA_TransparentForMouseEvents)
十六、设置文本QTextEdit段落边界
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QTextEdit edit;
edit.setText("The QTextEdit widget is an advanced editor that supports "
"formatted rich text. ");
edit.append("It can be used to display HTML and other rich document formats.");
QTextDocument * doc = edit.document();
QTextCursor cursor(doc);
cursor.movePosition(QTextCursor::End, QTextCursor::MoveAnchor);
if(1){
QTextBlockFormat tbf = cursor.blockFormat();
tbf.setLeftMargin(100);
tbf.setTopMargin(100);
cursor.setBlockFormat(tbf);
}
else {
QTextFrame *tf = doc->rootFrame();
QTextFrameFormat tff = tf->frameFormat();
tff.setMargin(50);
tf->setFrameFormat(tff);
}
edit.show();
return app.exec();
}
十七、如何将QGraphicsScene基准点移动到QGraphicsView左上角
QGraphicsView::setAlignment(Qt::AlignLeft | Qt::AlignTop)
十八、如何使用QComboBox,使它看起来像文件对话框窗口。
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QComboBox cb;
QTreeView *tv = new QTreeView;
tv->header()->hide();
QStandardItemModel *sim = new QStandardItemModel(1, 1);
QStandardItem *si = new QStandardItem;
QPixmap pix(16, 16);
pix.fill(Qt::red);
si->setText("C:\\");
si->setIcon(pix);
QStandardItem *childSi = new QStandardItem;
childSi->setText("windows");
pix.fill(Qt::blue);
childSi->setIcon(pix);
si->insertRow(0, childSi);
sim->setItem(0, 0, si);
cb.setModel(sim);
cb.setModelColumn(0);
tv->setRootIsDecorated(false);
cb.setView(tv);
cb.show();
QTimer::singleShot(0, tv, SLOT(expandAll()));
return a.exec();
}
十九、获得QTreeWidget所有可见项
class TreeWidget : public QTreeWidget {
Q_OBJECT
public:
TreeWidget(QWidget *parent = nullptr) : QTreeWidget(parent)
{
QStringList list;
list << "An item";
QTreeWidgetItem *item1 = new QTreeWidgetItem(list);
for (int i = 0; i < 100; i++) {
item1->addChild(new QTreeWidgetItem(item1, list));
}
QTreeWidgetItem *item2 = new QTreeWidgetItem(list);
QTreeWidgetItem *item3 = new QTreeWidgetItem(list);
QTreeWidgetItem *item4 = new QTreeWidgetItem(list);
addTopLevelItem(item1);
addTopLevelItem(item2);
addTopLevelItem(item3);
addTopLevelItem(item4);
item1->setExpanded(true);
}
public :
void test1()
{
QTreeWidgetItem *myItem = itemAt(0,0);
if (myItem) {
qDebug() << "I am visible";
myList << myItem;
}
while (itemBelow(myItem)) {
if (viewport()->rect().contains(visualItemRect(itemBelow(myItem)))) {
myItem = itemBelow(myItem);
myList << myItem;
qDebug() << "I am visible";
}else{
qDebug() << "I am visible";
myList << myItem;
break;
}}
qDebug() << myList.count() << " visible items" ;
}
QList <QTreeWidgetItem*>myList;
};
Qt内存泄露检查工具
Qt并没有自带工具。推荐使用:
Purify on Windows and on Linux we use Valgrind.