陕煤建设集团铜川分公司网站,保定网站开发,国内网站 备案,科技公司主要是做什么的qt-C笔记之不使用ui文件纯C构建时控件在布局管理器作用下的默认位置和大小实践
code review! 文章目录 qt-C笔记之不使用ui文件纯C构建时控件在布局管理器作用下的默认位置和大小实践1.ChatGPT解释2.ChatGPT——resize()和move()详解3.默认大小和位置——示例运行一4.默认大小…qt-C笔记之不使用ui文件纯C构建时控件在布局管理器作用下的默认位置和大小实践
code review! 文章目录 qt-C笔记之不使用ui文件纯C构建时控件在布局管理器作用下的默认位置和大小实践1.ChatGPT解释2.ChatGPT——resize()和move()详解3.默认大小和位置——示例运行一4.默认大小和位置——示例运行二5.默认大小和位置treeWidget的示例——示例运行三 1.ChatGPT解释
当在Qt中创建控件但没有指定其大小和位置时Qt会使用默认的大小和位置来显示这些控件。这些默认值是根据每种控件类型的样式和默认设置来确定的。
默认大小 每个控件类型都有一个默认的推荐大小该大小通常与控件的内容、样式和默认字体相关。例如一个QPushButton的默认大小可能足够容纳按钮上的文本并留有一定的边距。
默认位置 当控件没有显式指定位置时默认情况下Qt会按照它们在代码中创建的顺序来排列控件。也就是说后创建的控件将位于先创建的控件的后面。
默认情况下Qt中的控件是以窗口的左上角为参考点进行定位的。因此如果没有指定位置控件的默认位置将相对于窗口的左上角进行布局。
需要注意的是默认的大小和位置可能会因不同的操作系统、Qt版本和样式设置而有所差异。此外控件的默认大小和位置也可以通过样式表和其他属性进行自定义。
如果你想要更精确地控制控件的大小和位置可以使用控件的方法例如resize()和move()来显式地设置控件的大小和位置。这样可以确保控件按照你的要求进行布局。
2.ChatGPT——resize()和move()详解
在Qt中resize()和move()是用于显式设置控件大小和位置的方法。
resize(width, height)该方法用于设置控件的大小其中width和height分别表示控件的宽度和高度。调用该方法后控件将被调整为指定的大小。
示例
QPushButton button;
button.resize(100, 50); // 设置按钮的大小为宽度100、高度50move(x, y)该方法用于设置控件的位置其中x和y分别表示控件的横坐标和纵坐标。调用该方法后控件将被移动到指定的位置。
示例
QPushButton button;
button.move(200, 150); // 将按钮移动到坐标(200, 150)的位置这两个方法可以单独使用也可以组合使用以达到精确控制控件大小和位置的目的。
需要注意的是resize()和move()方法中指定的参数是相对于父窗口坐标系的。如果控件是直接添加到窗口中则相对于窗口的左上角如果控件是添加到其他控件中则相对于父控件的左上角。
此外还可以使用setGeometry(x, y, width, height)方法一次性设置控件的位置和大小。该方法接受四个参数分别为控件的横坐标、纵坐标、宽度和高度。
示例
QPushButton button;
button.setGeometry(200, 150, 100, 50); // 设置按钮的位置和大小使用这些方法可以实现更精确的控件布局但在复杂的界面中使用布局管理器仍然是更推荐的方式因为它可以自动处理控件的位置和大小简化布局过程并适应不同的窗口大小和布局需求。
3.默认大小和位置——示例运行一 代码
#include QtWidgetsint main(int argc, char *argv[])
{QApplication app(argc, argv);// 创建主窗口QWidget window;window.setWindowTitle(控件位置示例);// 创建控件QLabel *label new QLabel(这是一个标签, window);QPushButton *button new QPushButton(这是一个按钮, window);// 创建垂直布局管理器QVBoxLayout *layout new QVBoxLayout(window);// 将控件添加到布局管理器中layout-addWidget(label);layout-addWidget(button);// 设置主窗口的布局管理器window.setLayout(layout);// 显示主窗口window.show();return app.exec();
}4.默认大小和位置——示例运行二 #include QtWidgetsint main(int argc, char *argv[])
{QApplication app(argc, argv);// 创建主窗口QWidget window;window.setWindowTitle(控件位置示例);// 创建控件QLabel *label new QLabel(这是一个标签, window);QPushButton *button new QPushButton(这是一个按钮, window);QLineEdit *lineEdit new QLineEdit(window);QTextEdit *textEdit new QTextEdit(window);QCheckBox *checkBox new QCheckBox(复选框, window);QRadioButton *radioButton1 new QRadioButton(单选按钮1, window);QRadioButton *radioButton2 new QRadioButton(单选按钮2, window);// 创建布局管理器QVBoxLayout *mainLayout new QVBoxLayout(window);QHBoxLayout *buttonLayout new QHBoxLayout;QVBoxLayout *radioLayout new QVBoxLayout;// 设置按钮布局buttonLayout-addWidget(button);buttonLayout-addWidget(lineEdit);// 设置单选按钮布局radioLayout-addWidget(radioButton1);radioLayout-addWidget(radioButton2);// 将控件添加到主布局管理器中mainLayout-addWidget(label);mainLayout-addWidget(textEdit);mainLayout-addWidget(checkBox);mainLayout-addLayout(buttonLayout);mainLayout-addLayout(radioLayout);// 设置主窗口的布局管理器window.setLayout(mainLayout);// 显示主窗口window.show();return app.exec();
}在这个示例中我添加了以下控件
QLineEdit用于输入单行文本。QTextEdit用于输入多行文本。QCheckBox复选框。QRadioButton单选按钮。
还创建了两个额外的布局管理器
QHBoxLayout用于将按钮和QLineEdit水平排列。QVBoxLayout用于将两个单选按钮垂直排列。
最后将这些控件和布局管理器添加到主布局管理器mainLayout中并将其设置为主窗口的布局管理器。
当运行这个示例代码时将看到一个包含了多个控件的窗口。这些控件将根据布局管理器的设置自动调整大小和位置以适应窗口的大小。
5.默认大小和位置treeWidget的示例——示例运行三 代码
#include QtWidgetsint main(int argc, char *argv[])
{QApplication app(argc, argv);// 创建主窗口QWidget window;window.setWindowTitle(Tree Widget 示例);// 创建 Tree WidgetQTreeWidget *treeWidget new QTreeWidget(window);treeWidget-setHeaderLabels({名称, 数值});// 创建根节点QTreeWidgetItem *rootItem new QTreeWidgetItem(treeWidget);rootItem-setText(0, 根节点);// 创建子节点QTreeWidgetItem *childItem1 new QTreeWidgetItem(rootItem);childItem1-setText(0, 子节点1);childItem1-setText(1, 数值1);childItem1-setIcon(0, QIcon::fromTheme(folder));QTreeWidgetItem *childItem2 new QTreeWidgetItem(rootItem);childItem2-setText(0, 子节点2);childItem2-setText(1, 数值2);childItem2-setIcon(0, QIcon::fromTheme(folder));// 创建孙子节点QTreeWidgetItem *grandchildItem1 new QTreeWidgetItem(childItem2);grandchildItem1-setText(0, 孙子节点1);grandchildItem1-setText(1, 数值3);grandchildItem1-setIcon(0, QIcon::fromTheme(document));QTreeWidgetItem *grandchildItem2 new QTreeWidgetItem(childItem2);grandchildItem2-setText(0, 孙子节点2);grandchildItem2-setText(1, 数值4);grandchildItem2-setIcon(0, QIcon::fromTheme(document));// 将 Tree Widget 添加到主窗口布局中QVBoxLayout *layout new QVBoxLayout(window);layout-addWidget(treeWidget);window.setLayout(layout);// 显示主窗口window.show();return app.exec();
}使用Qt内置的图标使用QIcon::fromTheme()方法来获取Qt内置图标。fromTheme()方法接受一个图标名称作为参数返回与该名称关联的内置图标。
在示例中我们使用了folder图标名称来设置根节点和子节点的图标使用document图标名称来设置孙子节点的图标。这些内置图标将根据当前操作系统的主题和图标设置进行自动选择。
运行示例后将看到一个具有多层级树形结构和内置图标的QTreeWidget控件。