Qt 常用小部件介绍
1. 布局窗口与基本原理
在布局窗口的代码中,
LayoutWindow.cpp
创建了两个用于布局小部件的盒子布局,即水平和垂直盒子布局。垂直布局包含两个标签,分别为“Top”和“Bottom”;水平布局包含一个显示为“Right”的标签和垂直布局。可以像示例中那样,在布局小部件中自由放置其他布局小部件。
尝试修改
LayoutWindow.cpp
中的代码,以更好地理解盒子布局的工作原理。至此,我们已经了解了使用 Qt 的基本原理,包括信号与槽、元对象编译器(moc)和布局,接下来将更深入地研究小部件。
2. QLineEdit 小部件
QLineEdit 是 Qt 的单行文本输入小部件,用于输入简短文本,如用户的名字。可以使用输入掩码限制文本输入,使其符合特定模板,也可以应用验证函数,确保用户输入正确的日期、电话号码等。QLineEdit 具有编辑功能,用户可以选择文本部分、进行剪切和粘贴、撤销和重做等操作,这些操作既可以通过用户界面完成,也可以使用 API 实现。
以下是 QLineEdit 的构造函数和常用方法:
#include <qlineedit.h>
QLineEdit::QlineEdit (QWidget *parent, const char* name = 0 )
QLineEdit::QLineEdit (const QString &contents, QWidget *parent, const char *name = 0 )
QLineEdit::QLineEdit (const QString &contents, const QString &inputMask, QWidget *parent, const char *name = 0 )
void setInputMask (const QString &inputMask)
void insert (const QString &newText )
bool isModified (void)
void setMaxLength (int length)
void setReadOnly (bool read)
void setText (const QString &text)
QString text (void)
void setEchoMode(EchoMode mode)
在构造函数中,像通常一样使用
parent
和
name
设置父小部件和小部件名称。一个有趣的属性是
EchoMode
,它决定了文本在小部件中的显示方式,有以下三种值:
-
QLineEdit::Normal
:显示输入的字符(默认)
-
QLineEdit::Password
:用星号代替字符显示
-
QLineEdit::NoEcho
:不显示任何内容
可以使用
setEchoMode
设置模式,例如:
lineEdit->setEchoMode(QLineEdit::Password);
Qt 3.2 引入的输入掩码(inputMask)根据掩码规则限制输入。输入掩码是由字符组成的字符串,每个字符对应一个接受特定字符范围的规则。如果熟悉正则表达式,输入掩码使用的原理与之类似。输入掩码字符有两种类型:一种表示必须存在某个字符,另一种表示如果存在字符,则将其限制在规则范围内。以下是一些输入掩码字符及其含义的示例:
| 字符 | 含义 |
| ---- | ---- |
| # | 允许但不要求有正负号 |
| > | 将后续输入转换为大写 |
| < | 将后续输入转换为小写 |
|! | 停止大小写转换 |
| \ | 转义字符,用于将特殊字符用作分隔符 |
以下是一些输入掩码和允许输入的示例:
| 掩码 | 允许输入 |
| ---- | ---- |
| “AAAAAA-999D” | 允许 “Athens-2004”,但不允许 “Sydney-2000” 或 “Atlanta-1996” |
| “AAAAnn-99-99;” | 允许 “March-03-12”,但不允许 “May-03-12” 或 “September-03-12” |
| “000.000.000.000” | 允许 IP 地址,如 “192.168.0.1” |
2.1 QLineEdit 示例
以下是一个使用 QLineEdit 的示例:
// LineEdit.h
#include <qmainwindow.h>
#include <qlineedit.h>
#include <qstring.h>
class LineEdit : public QMainWindow
{
Q_OBJECT
public:
LineEdit(QWidget *parent = 0, const char *name = 0);
QLineEdit *password_entry;
private slots:
void Clicked();
};
// LineEdit.cpp
#include “LineEdit.moc”
#include <qpushbutton.h>
#include <qapplication.h>
#include <qlabel.h>
#include <qlayout.h>
#include <iostream>
LineEdit::LineEdit(QWidget *parent, const char *name) : QMainWindow(parent, name)
{
QWidget *widget = new QWidget(this);
setCentralWidget(widget);
QGridLayout *grid = new QGridLayout(widget,3,2,10, 10,”grid”);
QLineEdit *username_entry = new QLineEdit( widget, “username_entry”);
password_entry = new QLineEdit( widget, “password_entry”);
password_entry->setEchoMode(QLineEdit::Password);
grid->addWidget(new QLabel(“Username”, widget, “userlabel”), 0, 0, 0);
grid->addWidget(new QLabel(“Password”, widget, “passwordlabel”), 1, 0, 0);
grid->addWidget(username_entry, 0,1, 0);
grid->addWidget(password_entry, 1,1, 0);
QPushButton *button = new QPushButton (“Ok”, widget, “button”);
grid->addWidget(button, 2,1,Qt::AlignRight);
resize( 350, 200 );
connect (button, SIGNAL(clicked()), this, SLOT(Clicked()));
}
void LineEdit::Clicked(void)
{
std::cout << password_entry->text() << “\n”;
}
int main(int argc, char **argv)
{
QApplication app(argc,argv);
LineEdit *window = new LineEdit();
app.setMainWidget(window);
window->show();
return app.exec();
}
运行此程序时,会看到一个包含用户名和密码输入框以及一个按钮的窗口。点击按钮时,会打印出密码输入框中的内容。
3. Qt 按钮小部件
按钮小部件在各种工具包中都很常见,其外观、用法和 API 差异不大。Qt 提供了标准的 PushButton、CheckBox 和 RadioButton 变体。
3.1 QButton:按钮基类
Qt 中的按钮小部件都继承自抽象的 QButton 类。该类具有查询和切换按钮开/关状态的方法,以及设置按钮文本或像素图的方法。通常不需要直接实例化 QButton 小部件。以下是其有用的成员函数:
#include <qbutton.h>
virtual void QButton::setText ( const QString & )
virtual void QButton::setPixmap ( const QPixmap & )
bool QButton::isToggleButton () const
virtual void QButton::setDown ( bool )
bool QButton::isDown () const
bool QButton::isOn () const
enum QButton::ToggleState { Off, NoChange, On }
ToggleState QButton::state () const
isDown
和
isOn
函数含义相同,如果按钮被按下或激活,它们都返回 TRUE。如果某个选项当前不可用,可以通过调用
QWidget::setEnable(FALSE)
禁用包括 QButton 在内的任何小部件。
3.2 QPushButton
QPushButton 是标准的通用按钮,包含文本(如 “OK” 或 “Cancel”)和/或像素图图标。与所有 QButton 一样,激活时会发出
clicked
信号,通常用于连接槽并执行某些操作。可以通过调用
setToggleButton
将 QPushButton 从无状态按钮切换为切换按钮(即可以打开或关闭)。
以下是 QPushButton 的构造函数和常用方法:
#include <qpushbutton.h>
QPushButton (QWidget *parent, const char *name = 0)
QPushButton (const QString &text, QWidget *parent, const char *name = 0)
QPushButton (const QIconSet &icon, const QString &text, QWidget *parent, const char * name = 0 )
void QPushButton::setToggleButton (bool);
3.3 QCheckBox
QCheckBox 是有状态的按钮,可以打开或关闭。其外观取决于当前的窗口样式(如 Motif、Windows 等),通常显示为带有右侧文本的勾选框。还可以将 QCheckBox 设置为第三种中间状态,表示 “无更改”,这在某些情况下很有用,例如无法读取 QCheckBox 所代表选项的状态,但仍希望用户能够选择保持不变或主动打开/关闭该选项。
以下是 QCheckBox 的构造函数和常用方法:
#include <qcheckbox.h>
QCheckBox (QWidget *parent, const char *name = 0 )
QCheckBox (const QString &text, QWidget *parent, const char *name = 0 )
bool QCheckBox::isChecked ()
void QCheckBox::setTristate ( bool y = TRUE )
bool QCheckBox::isTristate ()
3.4 QRadioButton
单选按钮是用于表示排他性选择的切换按钮,用户只能从一组选项中选择一个。QRadioButton 与 QCheckBox 本身区别不大,分组和排他性由 QButtonGroup 类处理,主要区别在于单选按钮显示为圆形按钮,而不是勾选框。
QButtonGroup 是一个小部件,通过提供便利方法使处理按钮组更加容易:
#include <qbuttongroup.h>
QButtonGroup (QWidget *parent = 0, const char * name = 0 )
QButtonGroup (const QString & title, QWidget * parent = 0, const char * name = 0 )
int insert (QButton *button, int id = -1)
void remove (QButton *button)
int id (QButton *button) const
int count () const
int selectedId () const
使用 QButtonGroup 非常简单,如果使用带标题的构造函数,还可以在按钮周围添加可选的框架。可以使用
insert
方法或指定 QButtonGroup 作为按钮的父小部件,将按钮添加到 QButtonGroup 中。可以在
insert
方法中指定一个 ID,以唯一标识组中的每个按钮,这在查询哪个按钮被选中时特别有用,因为
selectedId
会返回被选中按钮的 ID。
以下是 QRadioButton 的构造函数和常用方法:
#include <qradiobutton.h>
QRadioButton (QWidget *parent, const char *name = 0 )
QRadioButton (const QString &text, QWidget *parent, const char *name = 0 )
bool QRadioButton::isChecked ()
3.5 QButtons 示例
以下是一个使用 Qt 按钮的示例:
// Buttons.h
#include <qmainwindow.h>
#include <qcheckbox.h>
#include <qbutton.h>
#include <qradiobutton.h>
class Buttons : public QMainWindow
{
Q_OBJECT
public:
Buttons(QWidget *parent = 0, const char *name = 0);
private:
void PrintActive(QButton *button);
QCheckBox *checkbox;
QRadioButton *radiobutton1, *radiobutton2;
private slots:
void Clicked();
};
// Buttons.cpp
#include “Buttons.moc”
#include <qbuttongroup.h>
#include <qpushbutton.h>
#include <qapplication.h>
#include <qlabel.h>
#include <qlayout.h>
#include <iostream>
Buttons::Buttons(QWidget *parent, const char *name) : QMainWindow(parent, name)
{
QWidget *widget = new QWidget(this);
setCentralWidget(widget);
QVBoxLayout *vbox = new QVBoxLayout(widget,5, 10,”vbox”);
checkbox = new QCheckBox(“CheckButton”, widget, “check”);
vbox->addWidget(checkbox);
QButtonGroup *buttongroup = new QButtonGroup(0);
radiobutton1 = new QRadioButton(“RadioButton1”, widget, “radio1”);
buttongroup->insert(radiobutton1);
vbox->addWidget(radiobutton1);
radiobutton2 = new QRadioButton(“RadioButton2”, widget, “radio2”);
buttongroup->insert(radiobutton2);
vbox->addWidget(radiobutton2);
QPushButton *button = new QPushButton (“Ok”, widget, “button”);
vbox->addWidget(button);
resize( 350, 200 );
connect (button, SIGNAL(clicked()), this, SLOT(Clicked()));
}
void Buttons::PrintActive(QButton *button)
{
if (button->isOn())
std::cout << button->name() << “ is checked\n”;
else
std::cout << button->name() << “ is not checked\n”;
}
void Buttons::Clicked(void)
{
PrintActive(checkbox);
PrintActive(radiobutton1);
PrintActive(radiobutton2);
std::cout << “\n”;
}
int main(int argc, char **argv)
{
QApplication app(argc,argv);
Buttons *window = new Buttons();
app.setMainWidget(window);
window->show();
return app.exec();
}
这个简单的示例展示了如何查询各种 Qt 按钮小部件的状态。可以看到,这些小部件创建后,大部分操作方式相同。例如,
PrintActive
函数展示了如何获取按钮的开/关状态,该函数适用于所有有状态的按钮类型,如复选框和单选按钮。主要区别在于创建按钮小部件的调用方式,而单选按钮由于其排他性,创建时需要更多的操作,需要创建一个 QButtonGroup 来确保组中只有一个单选按钮可以在任何时候处于活动状态。
4. QComboBox 小部件
单选按钮适用于让用户从少量选项(例如六个或更少)中进行选择。当选项数量超过六个时,为了使窗口保持合理大小,情况会变得难以处理。此时,使用带有下拉菜单的输入框(即组合框)是一个完美的解决方案。点击组合框时,会显示选项菜单,选项数量仅受搜索列表的实际可行性限制。
QComboBox 结合了 QLineEdit、QPushButton 和下拉菜单的功能,使用户能够从无限数量的选项中选择一个。QComboBox 可以是读写或只读的。如果是读写模式,用户可以输入与提供的选项不同的内容;否则,用户只能从下拉列表中选择。
创建 QComboBox 时,可以在构造函数中使用布尔值指定其为读写或只读模式:
QComboBox *combo = new QComboBox(TRUE, parent, “widgetname”);
传入
TRUE
将 QComboBox 设置为读写模式,其他参数是通常的父小部件指针和小部件名称。
可以单独或批量添加选项,可以使用
QString
或传统的
char*
格式。插入单个项目可以调用
insertItem
:
combo->insertItem(QString(“An Item”), 1);
这需要一个
QString
对象和一个位置索引,这里值为 1 表示将该项目设置为列表中的第一个。如果要添加到列表末尾,只需传入任何负整数。
更常见的是一次添加多个项目,可以使用
QStrList
类,或者像下面这样使用
char*
数组:
char* weather[] = {“Thunder”, “Lightning”, “Rain”, 0};
combo->insertStrList(weather, 3);
同样,可以指定插入项目在列表中的索引。
如果 QComboBox 是读写模式,用户输入的值可以自动添加到选项列表中,这是一个节省时间的实用功能,避免用户多次输入相同的值。插入策略(InsertionPolicy)控制新条目在选项列表中的添加位置,可以从以下选项中选择:
| 选项 | 作用 |
| ---- | ---- |
| QComboBox::AtTop | 将新条目插入列表的第一个选项 |
| QComboBox::AtBottom | 将新条目插入列表的最后一个选项 |
| QComboBox::AtCurrent | 替换之前选择的选项 |
| QComboBox::BeforeCurrent | 在之前选择的选项之前插入条目 |
| QComboBox::AfterCurrent | 在之前选择的选项之后插入条目 |
| QComboBox::NoInsertion | 新条目不插入选项列表 |
可以调用
setInsertionPolicy
方法设置策略,例如:
combo->setInsertionPolicy(QComboBox::AtTop);
以下是 QComboBox 的构造函数和常用方法:
#include <qcombobox.h>
QComboBox (QWidget *parent = 0, const char *name = 0)
QComboBox (bool readwrite, QWidget *parent = 0, const char *name = 0)
int count ()
void insertStringList (const QStringList &list, int index = -1)
void insertStrList (const QStrList &list, int index = -1)
void insertStrList (const QStrList *list, int index = -1)
void insertStrList (const char **strings, int numStrings = -1, int index = -1)
void insertItem (const QString &t, int index = -1)
void removeItem (int index)
virtual void setCurrentItem (int index)
QString currentText ()
virtual void setCurrentText (const QString &)
void setEditable (bool)
count
函数返回列表中的选项数量。
QStringList
和
QStrList
是 Qt 字符串集合类,可用于添加选项。可以使用
removeItem
删除选项,使用
currentText
和
setCurrentText
获取和设置当前选项,使用
setEditable
切换可编辑状态。
QComboBox 每当选择新选项时会发出
textChanged(QString&)
信号,并将新选择的选项作为参数传递。
4.1 QComboBox 示例
以下是一个使用 QComboBox 的示例:
// ComboBox.h
#include <qmainwindow.h>
#include <qcombobox.h>
class ComboBox : public QMainWindow
{
Q_OBJECT
public:
ComboBox(QWidget *parent = 0, const char *name = 0);
private slots:
void Changed(const QString& s);
};
// ComboBox.cpp
#include “ComboBox.moc”
#include <qlayout.h>
#include <iostream>
ComboBox::ComboBox(QWidget *parent, const char *name) : QMainWindow(parent, name)
{
QWidget *widget = new QWidget(this);
setCentralWidget(widget);
QVBoxLayout *vbox = new QVBoxLayout(widget, 5, 10,”vbox”);
QComboBox *editablecombo = new QComboBox(TRUE, widget, “editable”);
vbox->addWidget(editablecombo);
QComboBox *readonlycombo = new QComboBox(FALSE, widget, “readonly”);
vbox->addWidget(readonlycombo);
static const char* items[] = { “Macbeth”, “Twelfth Night”, “Othello”, 0 };
editablecombo->insertStrList (items);
readonlycombo->insertStrList (items);
connect (editablecombo, SIGNAL(textChanged(const QString&)), this, SLOT(Changed(const QString&)));
resize( 350, 200 );
}
void ComboBox::Changed(const QString& s)
{
std::cout << s << “\n”;
}
int main(int argc, char **argv)
{
QApplication app(argc,argv);
ComboBox *window = new ComboBox();
app.setMainWidget(window);
window->show();
return app.exec();
}
运行此程序时,会看到两个 QComboBox 小部件,一个是读写的,另一个是只读的。每当从可编辑的 QComboBox 中选择新选项时,会在命令行中打印出新选择的选项。
5. QListView 小部件
Qt 中的列表和树由 QListView 小部件提供。QListView 可以显示普通列表和按行和列划分的分层数据,非常适合显示目录结构等内容,因为可以通过点击加减号框展开和收缩子元素,就像文件查看器一样。
与 GTK+ 的 ListView 小部件不同,QListView 同时处理数据和视图,虽然灵活性不是特别突出,但使用起来很方便。使用 QListView 可以选择行或单个单元格,进行数据的剪切和粘贴、按列排序,并且可以在单元格中显示 QCheckBox 小部件。内置了大量功能,作为程序员,只需要添加数据并设置一些格式规则即可。
创建 QListView 与通常的方式相同,指定父小部件和小部件名称:
QListView *view = new QListView(parent, “name”);
设置列标题可以使用
addColumn
方法:
view->addColumn(“Left Column”, width1 ); // 固定宽度
view->addColumn(“Right Column”); // 宽度自动调整
列的宽度以像素为单位设置,如果省略则默认为列中最宽元素的宽度,列会随着元素的添加和删除自动调整大小。
使用
QListViewItem
对象向 QListView 添加数据,该对象表示一行数据。只需要将 QListView 和行元素传递给构造函数,它就会自动添加到视图中:
QListViewItem *toplevel = new QListViewItem(view, “Left Data”, “Right Data”);
第一个参数可以是 QListView(如本例)或另一个
QListViewItem
。如果传递
QListViewItem
,该行将作为该
QListViewItem
的子项出现。因此,通过为顶级节点传递 QListView,为子节点传递后续的
QListViewItem
来形成树结构。
以下是
QListViewItem
的一些方法,可用于遍历树:
#include <qlistview.h>
virtual void insertItem ( QListViewItem * newChild )
virtual void setText ( int column, const QString & text )
virtual QString text ( int column ) const
QListViewItem *firstChild () const
QListViewItem *nextSibling () const
QListViewItem *parent () const
QListViewItem *itemAbove ()
QListViewItem *itemBelow ()
可以通过在 QListView 上调用
firstChild
获取树中的第一行,然后反复调用
firstChild
和
nextSibling
来返回部分或整个树。
以下是一个打印所有顶级节点第一列的代码片段:
QListViewItem *child = view->firstChild();
while(child)
{
cout << myChild->text(1) << “\n”;
myChild = myChild->nextSibling();
}
5.1 QListView 示例
以下是一个使用 QListView 的示例:
// ListView.cpp
#include “ListView.moc”
ListView::ListView(QWidget *parent, const char *name) : QMainWindow(parent, name)
{
listview = new QListView(this, “listview1”);
listview->addColumn(“Artist”);
listview->addColumn(“Title”);
listview->addColumn(“Catalogue”);
listview->setRootIsDecorated(TRUE);
QListViewItem *toplevel = new QListViewItem(listview, “Avril Lavigne”, “Let Go”, “AVCD01”);
new QListViewItem(toplevel, “Complicated”);
new QListViewItem(toplevel, “Sk8er Boi”);
setCentralWidget(listview);
}
int main(int argc, char **argv)
{
QApplication app(argc,argv);
ListView *window = new ListView();
app.setMainWidget(window);
window->show();
return app.exec();
}
运行此程序时,会看到一个包含艺术家、标题和目录列的列表视图,其中包含一些示例数据。
综上所述,我们介绍了 Qt 中的多种常用小部件,包括 QLineEdit、按钮小部件(QPushButton、QCheckBox、QRadioButton)、QComboBox 和 QListView。每个小部件都有其独特的功能和用途,通过示例代码展示了如何使用它们。希望这些内容能帮助你更好地使用 Qt 进行开发。
Qt 常用小部件介绍
6. 小部件使用总结与对比
在前面的内容中,我们详细介绍了 Qt 中的多种常用小部件,下面对这些小部件的使用场景和特点进行总结与对比。
| 小部件名称 | 使用场景 | 特点 |
|---|---|---|
| QLineEdit | 用于输入简短文本,如用户名、密码等 | 可设置输入掩码、验证函数,有编辑功能,可设置显示模式 |
| QPushButton | 执行某个操作,如确认、取消等 |
可切换为切换按钮,激活时发出
clicked
信号
|
| QCheckBox | 表示某个选项的开关状态,可设置中间状态 | 有开/关和中间状态,可查询状态 |
| QRadioButton | 从一组选项中选择一个 |
需要使用
QButtonGroup
确保排他性
|
| QComboBox | 从大量选项中选择一个,可设置读写或只读模式 | 可单独或批量添加选项,有插入策略 |
| QListView | 显示普通列表或分层数据,如目录结构 | 可选择行或单元格,进行数据操作和排序 |
通过这个表格,我们可以更清晰地了解每个小部件的适用场景和特点,在实际开发中可以根据需求选择合适的小部件。
7. 小部件使用流程总结
下面是使用这些小部件的一般流程,以 mermaid 格式的流程图展示:
graph LR
A[创建窗口] --> B[创建布局]
B --> C[创建小部件]
C --> D[设置小部件属性]
D --> E[将小部件添加到布局]
E --> F[连接信号与槽]
F --> G[显示窗口]
这个流程图展示了使用 Qt 小部件的基本步骤:
1.
创建窗口
:使用
QMainWindow
或其他窗口类创建主窗口。
2.
创建布局
:选择合适的布局管理器,如
QGridLayout
、
QVBoxLayout
等。
3.
创建小部件
:根据需求创建相应的小部件,如
QLineEdit
、
QPushButton
等。
4.
设置小部件属性
:设置小部件的各种属性,如文本、输入掩码、显示模式等。
5.
将小部件添加到布局
:将创建好的小部件添加到布局管理器中。
6.
连接信号与槽
:将小部件的信号与相应的槽函数连接起来,实现交互功能。
7.
显示窗口
:调用
show()
方法显示窗口。
8. 代码优化建议
在使用这些小部件的过程中,我们可以对代码进行一些优化,以提高代码的可读性和可维护性。以下是一些建议:
-
封装重复代码
:如果有一些代码在多个地方重复使用,可以将其封装成函数或类,减少代码冗余。例如,在多个按钮的点击事件处理中,如果有相同的逻辑,可以将其封装成一个函数。
-
合理命名
:为小部件和变量取有意义的名字,使代码更易理解。例如,使用
username_entry
表示用户名输入框,而不是使用无意义的变量名。
-
使用注释
:在关键代码处添加注释,解释代码的功能和用途,方便后续维护。例如,在设置输入掩码的代码处,注释说明该掩码的作用。
9. 实际应用案例
假设我们要开发一个简单的用户登录界面,使用前面介绍的小部件可以实现如下:
// LoginWindow.h
#include <qmainwindow.h>
#include <qlineedit.h>
#include <qpushbutton.h>
#include <qlabel.h>
#include <qlayout.h>
class LoginWindow : public QMainWindow
{
Q_OBJECT
public:
LoginWindow(QWidget *parent = 0, const char *name = 0);
private slots:
void onLoginClicked();
private:
QLineEdit *username_entry;
QLineEdit *password_entry;
QPushButton *login_button;
};
// LoginWindow.cpp
#include “LoginWindow.moc”
#include <iostream>
LoginWindow::LoginWindow(QWidget *parent, const char *name) : QMainWindow(parent, name)
{
QWidget *widget = new QWidget(this);
setCentralWidget(widget);
QGridLayout *grid = new QGridLayout(widget, 3, 2, 10, 10, “grid”);
username_entry = new QLineEdit(widget, “username_entry”);
password_entry = new QLineEdit(widget, “password_entry”);
password_entry->setEchoMode(QLineEdit::Password);
grid->addWidget(new QLabel(“Username”, widget, “userlabel”), 0, 0, 0);
grid->addWidget(new QLabel(“Password”, widget, “passwordlabel”), 1, 0, 0);
grid->addWidget(username_entry, 0, 1, 0);
grid->addWidget(password_entry, 1, 1, 0);
login_button = new QPushButton(“Login”, widget, “login_button”);
grid->addWidget(login_button, 2, 1, Qt::AlignRight);
resize(350, 200);
connect(login_button, SIGNAL(clicked()), this, SLOT(onLoginClicked()));
}
void LoginWindow::onLoginClicked()
{
std::cout << “Username: ” << username_entry->text() << std::endl;
std::cout << “Password: ” << password_entry->text() << std::endl;
// 这里可以添加实际的登录验证逻辑
}
int main(int argc, char **argv)
{
QApplication app(argc, argv);
LoginWindow *window = new LoginWindow();
app.setMainWidget(window);
window->show();
return app.exec();
}
这个示例展示了如何使用
QLineEdit
、
QPushButton
和
QLabel
小部件创建一个简单的用户登录界面,并处理登录按钮的点击事件。
10. 总结与展望
通过本文的介绍,我们深入了解了 Qt 中多种常用小部件的使用方法和特点。这些小部件为我们开发图形用户界面提供了丰富的选择,可以根据不同的需求灵活组合使用。
在未来的开发中,我们可以进一步探索 Qt 的其他功能,如自定义小部件、动画效果等,以创建更加丰富和交互性强的应用程序。同时,我们也可以结合其他技术,如数据库、网络编程等,开发出更具实用性的软件。
希望本文能够帮助你更好地掌握 Qt 小部件的使用,在实际开发中发挥更大的作用。
超级会员免费看
686

被折叠的 条评论
为什么被折叠?



