Qt实践录:常见控件操作示例1

本文记录QT常见控件的操作示例。包括:QPushBotton、QLabel、QComboBox、QSlider、QSpinBox、编辑框(QLineEdit/QPlainTextEdit/QTextEdit) 等等。以使用为导向,慢慢补充。

常见的控件,有很多设置项是相同的。如使能/禁止,可见/不可见,设置提示语,等等。

QPushBotton

常用操作:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
使能、禁止:
ui->pushButton->setEnabled(true);
ui->pushButton->setEnabled(false);
可见/不可见:
ui->pushButton->setVisible(true);
ui->pushButton->setVisible(false);
提示语:
ui->pushButton->setToolTip("button tips");
按钮扁平:
ui->pushButton->setFlat(true);
设置文字、图标等:
ui->pushButton->setText(tr("退出程序"));
ui->pushButton->setIconSize(ui->pushButton->rect().size()); // 设置大小
ui->pushButton->setIcon(QIcon(":images/exit.png"));
设置字体或大小:
QFont qFont;
qFont.setBold(true); // 这里设置加粗,其它默认
ui->pushButton->setFont(qFont);
ui->pushButton->setText(tr("监听端口"));
清除文字:
ui->pushButton->clear();

单击事件:

1
2
3
4
5
6
7
8
控件名称为 pushButton。  
private slots:
void on_pushButton_clicked();

void MainWindow::on_pushButton_clicked()
{
// ...
}

QLabel

1
2
3
4
5
设置图片:
QPixmap pixmap(":images/logo.png");
ui->label->setPixmap(pixmap);
ui->label->setFixedSize(128, 128);
ui->label->setScaledContents(true);

QComboBox

1
2
3
4
5
6
7
8
9
10
11
12
添加数据项:
ui->comboBox->addItem("0"); // 单项添加
QStringList list;
list.clear();
list << "1200" << "2400" << "4800" << "9600" << "14400" << \
"19200" << "38400" << "43000" << "57600" << "76800" << \
"115200" << "230400" << "256000" << "460800" << "921600";
ui->comboBox->addItems(list); // 多项添加
设置当前项:
ui->comboBox->setCurrentText(tr("115200"));
获取当前项:
ui->comboBox->currentText();

QSlider

Horizontal Slider 和 Vertical Slider类似。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
设置范围及当前值:
ui->horizontalSlider->setRange(0, 100);
ui->horizontalSlider->setValue(30);

获取值:
int val = ui->horizontalSlider->value();

数据变化事件
private slots:
void on_horizontalSlider_valueChanged(int value);

void MainWindow::on_horizontalSlider_valueChanged(int value)
{
showDebugInfo(value);
}

QSpinBox

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
设置范围及当前值:
ui->spinBox->setRange(0, 100);
ui->spinBox->setValue(30);

获取值:
int val = ui->spinBox->value();

数据变化事件
private slots:
void on_spinBox_valueChanged(int value);

void MainWindow::on_spinBox_valueChanged(int arg1)
{
showDebugInfo(arg1);
}

文本框

本节的文本框在一定程度上可以认为是一个各类的控件,但实际是不相干的,其中 QTextEdit 和 QPlainEdit 继承自 QAbstractScrollArea,而 QLineEdit 则继承于 QWidget。注意,前两者最终还是继承 QWidget,但是 QLineEdit 直接继承 QWidget 的。

QLineEdit

QLineEdit 用于单行文字的显示和输入。如账号、密码,等。

1
2
3
4
5
6
7
8
9
ui->lineEdit->setPlaceholderText("username"); // 占位字符串,用于提示语
ui->lineEdit->setText("lineEdit"); // 文字
ui->lineEdit->setReadOnly(true); // 只读
ui->lineEdit->setAlignment(Qt::AlignHCenter); // 居中对齐
ui->lineEdit->setMaxLength(6); // 文字最大长度
// QLineEdit::Password 文字用圆点替换,
// QLineEdit::PasswordEchoOnEdit 输入时显示,结束后圆点替换
// QLineEdit::NoEcho // 不显示任何内容,用于长度保护
ui->lineEdit->setEchoMode(QLineEdit::Password);

事件(控件名为 lineEdit):

1
2
on_lineEdit_textChanged:输入文字过程中响应
on_lineEdit_editingFinished:文字输入结束后响应(如按回车或Tab键)

QPlainTextEdit

用于纯文本的输入和显示。

1
2
3
4
5
6
ui->plainTextEdit->setPlaceholderText("sth text here");
ui->plainTextEdit->setPlainText("foo");
ui->plainTextEdit->setReadOnly(true);
// 追加,分别支持html和纯文本
ui->plainTextEdit->appendHtml("<font color=\"red\"> red </font>");
ui->plainTextEdit->appendPlainText("add");

QTextEdit

用于纯文本、富文本的输入和显示。

1
2
3
4
5
ui->textEdit->setPlaceholderText("sth text here");
ui->textEdit->setPlainText("foo"); // !! 也有setPlainText函数
ui->textEdit->setText("foo");
ui->textEdit->setReadOnly(true);
ui->textEdit->append("<font color=\"red\"> red </font>"); // 追加,支持html

QPlainTextEdit 和 QTextEdit 有textChanged事件响应,但无editingFinished事件。两者支持 HTML 语法,对于一些场合可提高友好性,如不同类别文字使用不同颜色显示,加粗、斜体等。

QTextBrower

继承自 QTextEdit,只读模式,添加导航功能。

1
2
3
ui->textBrowser->setHtml("a<br>b"); // 
ui->textBrowser->setText("hello world\n");
ui->textBrowser->append("a<br>b");