Qt5:输入控件 QPushButton/ QToolButton/ QRadioButton/ QCheckBox/ QTextEdit/ QComboBox/ QSpinBox/ QLabel

作者及原代码链接:跟小豆君学Qt

跟着学习;完整实现代码;示例截图;

 

QPushButton

  • autoDefault:自动默认按钮,当在一个对话框中,用户输入完信息后,想要点击回车确认,则这时可以设置OK按钮的autoDefault为true
  • default:是否为自动默认按钮
  • flat:是否为扁平状态。如果为true,则会去掉按钮的边框

QToolButton:工具按钮,工具按钮主要用在主窗口的工具栏中,一个工具按钮通常会显示一个图标,这个图标就代表了具体的操作。工具按钮还可以增加一个QMenu菜单;

arrowType:菜单提示的小箭头类型。

  • Qt::NoArrow:无箭头。
  • Qt::UpArrow:箭头向上。
  • Qt::DownArrow:箭头向下。
  • Qt::LeftArrow:箭头向左。
  • Qt::RightArrow:箭头向右。

autoRaise:自动突起。

pupupModel:菜单弹出模式。

  • QToolButton::DelayedPopup:当鼠标点击按钮一段时间后,才弹出菜单。
  • QToolButton::MenuButtonPopup:这个模式下会有一个小箭头显示在按钮右下角,用来提示点击按钮可以弹出一个菜单。
  • QToolButton::InstantPopup:点击按钮立刻弹出菜单,这样的话按钮本身的点击功能将无效。

toolButtonStyle:图标和文字的排版模式。

  • Qt::ToolButtonIconOnly:只显示标签。
  • Qt::ToolButtonTextOnly:只显示文字。
  • Qt::ToolButtonTextBesideIcon:文字显示在标签旁边。
  • Qt::ToolButtonTextUnderIcon:文字显示在标签下面。
  • Qt::ToolButtonFollowStyle:依赖样式的设置。

QRadioButton:单选按钮,QRadioButton否启用自动排他性;

QCheckBox:复选框按钮;

tristate:是否为三种状态。三态即:全选,全不选,部分勾选。在树控件中,常会用到三态。

示例:

代码实现:

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    ui->pushButton->setAutoRepeat(true);
    ui->pushButton->setAutoRepeatDelay(2000);
    ui->pushButton->setAutoRepeatInterval(1000);
}

Widget::~Widget()
{
    delete ui;
}

void Widget::on_pushButton_clicked()
{
    int val = ui->spinBox->value();
    ui->spinBox->setValue(val+1);
}

void Widget::on_check_flat_stateChanged(int arg1)
{
    ui->pushButton->setFlat(arg1 == Qt::Checked);
}

QTextEdit 富文本编辑器:可以显示图片,链接,表格,对文本进行格式化处理等;

1 autoFormatting  自动格式化;

2 cursorWidth 光标宽度,默认为1个像素;

3 lineWrapMode 换行模式;

  • NoWrap 不换行。
  • WidgetWidth 到达窗口边缘处换行。默认模式。
  • FixedPixelWidth 到达固定的像素值换行。
  • FixedColumnWidth 到达固定的列号换行。

4 overwriteMode true-相当于文本编辑器中的插入模式;

5 plainText 纯文本,如果要获取编辑框的文本,可以调用toPlainText();

6 tabStopWidth 设置tab键缩进距离(像素);

7 wordWrapMode 单词换行模式

  • NoWrap: 不换行。
  • WordWrap: 在边界换行,单词本身并不会被拆分,如果当前行无法显示,则会显示在下一行。
  • ManualWrap:同NoWrap不换行。
  • WrapAnywhere: 一个单词可以分多行显示。
  • WrapAtWordBoundaryOrAnywhere: WordWrap|WrapAnywhere
  • 换行模式中,要先以lineWrapMode为标准,再看wordWrapMode

8 html QTextEdit还支持使用html标记语言;

示例:

代码实现:

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    iniTextEditTab();
}

Widget::~Widget()
{
    delete ui;
}

void Widget::on_spinBox_cursorWidth_valueChanged(int arg1)
{
    ui->textEdit->setCursorWidth(arg1);
}

void Widget::on_spinBox_lineWrapColumnOrWidth_valueChanged(int arg1)
{
    ui->textEdit->setLineWrapColumnOrWidth(arg1);
}

void Widget::on_spinBox_tabStopWidth_valueChanged(int arg1)
{
    ui->textEdit->setTabStopWidth(arg1);
}

void Widget::on_checkBox_overwriteMode_toggled(bool checked)
{
    ui->textEdit->setOverwriteMode(checked);
}

void Widget::on_checkBox_tabChangesFocus_toggled(bool checked)
{
    ui->textEdit->setTabChangesFocus(checked);
}

void Widget::on_comboBox_lineWrapMode_currentIndexChanged(int index)
{
    ui->textEdit->setLineWrapMode((QTextEdit::LineWrapMode)index);
}

void Widget::on_comboBox_wordWrapMode_currentIndexChanged(int index)
{
    ui->textEdit->setWordWrapMode((QTextOption::WrapMode)index);
}

void Widget::iniTextEditTab(){
    QStringList textList;
    textList << "NoWrap" <<"WidgetWidth" << "FixedPixelWidth" << "FixedColumnWidth";
    ui->comboBox_lineWrapMode->addItems(textList);

    textList.clear();
    textList << "NoWrap" << "WordWrap" <<"ManualWrap" << "WrapAnywhere" << "WrapAtWordBoundaryOrAnywhere";
    ui->comboBox_wordWrapMode->addItems(textList);
}

QComboBox 下拉框:提供了一个选项列表;

1 count: 下拉列表中的条目总个数;

2 currentData:当前item中存储的数据,尽量将当前对象id或指针存起来;

3 currentIndex:当前选择的条目索引,activated()只在由用户交互引起的更改时发出;

4 duplicatesEnabled:新增条目是否可重复;

5 editable:是否可编辑;

如果是可编辑的,那么会有以下设置:

  • 允许用户修改列表中的每个项目,并且调用clearEditText(),可清除显示的字符串,而不改变combobox的内容。如果你是调用的clear(),那么所有条目都会被清除。
  • 新输入的字符串也可以插入到列表中,并且可以选择插入的位置。默认策略是插入到最末端,但可以使用setInsertPolicy()来更改这个插入策略。
  • 使用setValidator()可以设置验证器。
  • 调用setCompleter()设置记忆或联想功能。

6 insertPolicy:插入模式。

  • QComboBox::NoInsert:不能插入。
  • QComboBox::InsertAtTop:插入到最上边。
  • QComboBox::InsertAtCurrent:替换当前的item文字。
  • QComboBox::InsertAtBottom:插入到最后。
  • QComboBox::InsertAfterCurrent:在当前item之后插入。
  • QComboBox::InsertBeforeCurrent:在当前Item之前插入。
  • QComboBox::InsertAlphabetically:按字幕顺序插入。

7 maxCount:列表允许可添加条目的最大个数。

如果你将最大数量设置为小于当前combobox中的条目数量,则额外的条目将被截断。

8 maxVisibleItems:最大可显示条目个数。

如果你的条目有很多时,你可以设置下拉列表中最多可显示的条目个数。

对应代码实现:

#include "widget.h"
#include "ui_widget.h"
#include <QUuid>
#include <QMessageBox>

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    initComboBoxTab();
}

Widget::~Widget()
{
    delete ui;
}

void Widget::initComboBoxTab(){
    QStringList textList;
        textList << "NoInsert" <<"InsertAtTop" << "InsertAtCurrent" << "InsertAtBottom"
                   << "InsertAfterCurrent" << "InsertBeforeCurrent" << "InsertAlphabetically";
        ui->combo_insertPolicy->addItems(textList);
}

Student Widget::addStudent(){
    Student stu;
    QString text = ui->combo_student->currentText();
    QStringList textList = text.split(",");
    if (textList.size() == 2){
        bool ok;
        QString name = textList.at(0);
        uint age = textList.at(1).toUInt(&ok);
        if(ok){
            stu.setId(QUuid::createUuid().toString());
            stu.setName(name);
            stu.setAge(age);
            m_studentHash.insert(stu.id(), stu);
        }
    }
    return stu;
}

void Widget::showStudent(int index){
    QString id = ui->combo_student->itemData(index).toString();
    Student stu = m_studentHash.value(id);
    if (stu.isValid()){
        ui->label_student->setText(stu.getDisplayText());
    }
}

bool Widget::hasAddStudentItem(){
    return m_studentHash.size() < ui->combo_student->count();
}



void Widget::on_combo_student_activated(int index)
{
    if (hasAddStudentItem()){
        Student stu = addStudent();
        if(stu.isValid()){
            ui->combo_student->setItemData(index, stu.id());
        }
        else{
            ui->combo_student->removeItem(index);
            QMessageBox::information(this, tr("input info"), tr("input error"), "OK");
        }
    }
    showStudent(index);
}

void Widget::on_combo_insertPolicy_activated(int index)
{
    ui->combo_student->setInsertPolicy((QComboBox::InsertPolicy)index);
}


void Widget::on_check_editable_toggled(bool checked)
{
    ui->combo_student->setEditable(checked);
    if(checked){
        ui->combo_student->setEditText("format: Name, age");
    }
}

void Widget::on_check_duplicatesEnabled_toggled(bool checked)
{
    ui->combo_student->setDuplicatesEnabled(checked);
}


void Widget::on_spinBox_maxVisibleItems_valueChanged(int arg1)
{
    ui->combo_student->setMaxVisibleItems(arg1);
}

void Widget::on_spinBox_maxCount_valueChanged(int arg1)
{
    ui->combo_student->setMaxCount(arg1);
}

QSpinBox 数值输入框

1 value:当前数值。

  • QSpinBox允许用户通过点击up/down按钮或按下键盘上的上下键来选择一个值,以增加/减少当前显示的值。用户还可以手动输入值。
  • 每次值改变QSpinBox时,都会发出两个valueChanged()信号,一个提供int,另一个提供QString。

2 singleStep:单步变化值;maximum:最大值;maximum:最小值。

  • 单击up / down按钮,或者使用键盘加速器的上下箭头,将增加或减少当前singleStep()步的值。可以使用一个构造函数来设置最小值,最大值和步长,并且可以稍后使用setMinimum()、setMaximum()和setSingleStep()来更改。默认是1。
  • QSpinBox也可以作为一个循环操作,即如果范围是0 - 99,而当前的值是99且wrapping()设置为真,点击“up”将会给出0。

3 prefix,suffix:前后缀;cleanText :不包含前后缀的字符串。

  • 还可以为输入的值设置前后缀。
  • text()用来显示完整字符串(包括任何前缀和后缀)
  • 使用cleanText()可以获得不带前缀或后缀的字符串。

4 displayInterBase:显示displayInterBase进制数。例如,2进制,16进制等。

#include "weekspinbox.h"
#include <QDebug>

WeekSpinBox::WeekSpinBox(QWidget* parent):
    QSpinBox(parent)
    {
        setMinimum(1);
        setMaximum(7);
        setWrapping(true); //设置可以循环
    }


QValidator::State WeekSpinBox::validate(QString &input, int &pos) const{
    int value = valueFromText(input);
    if (value >= 1 && value <= 7){
        return QValidator::Acceptable;
    }
    return QValidator::Invalid;
}

int WeekSpinBox::valueFromText(const QString &text) const{
    int index = tr("1234567一二三四五六七").indexOf(text);
    return index % 7 + 1;
}

QString WeekSpinBox::textFromValue(int value) const{
    QString txt = tr("一二三四五六天");
    return tr("星期%1").arg(txt.at(value-1));
}

QLabel 标签控件:标签控件可以用来显示文本,富文本,图片,动态图。

alignment:文字对齐方式。

这个属性已经在前面很多控件讲过了,这里就不赘述了。

默认为水平靠左,垂直居中。

hasSelectedTextselectedText:被选中的文字。

indent:缩进像素。

默认情况下,缩进是- 1。

margin:边距。

openExternalLinks:是否可以打开链接。

如果设置为true,将会调用QDesktopServices::openUrl()来打开链接。

如果设置为false,则会发出linkActivated信号。

pixmap:图片。

scaledContents:是否填充空间。

当启用后,如果标签显示一个图片,它将缩放图片以填充可用空间。

默认为false。

text:文本。

文本将被解释为纯文本或富文本,这取决于文本格式设置。默认设置是Qt::AutoText。

如果已经设置了好友,则从新文本中更新快捷键。

textFormat:文本格式。

  • Qt::PlainText:被解释为纯文本。
  • Qt::RichText:被解释为富文本(html)
  • Qt::AutoText:如果可以被解释成富文本,则解释为富文本,否则为纯文本。

10 textInteractionFlags:用户与标签的交互标识。

  • Qt::NoTextInteraction:不与用户交互。
  • Qt::TextSelectableByMouse:可以用鼠标选择,并使用上下文菜单或标准键盘快捷方式将其复制到剪贴板。
  • Qt::TextSelectableByKeyboard:将显示一个文本光标,可以用键盘上的光标键选择文本。
  • Qt::LinksAccessibleByMouse:链接可以被高亮显示并被鼠标激活。
  • Qt::LinksAccessibleByKeyboard:链接用tab选中,然后激活进入。
  • Qt::TextEditable:文本是完全可编辑的。
  • Qt::TextEditorInteraction:TextSelectableByMouse | TextSelectableByKeyboard | TextEditable
  • Qt::TextBrowserInteraction:TextSelectableByMouse | LinksAccessibleByMouse | LinksAccessibleByKeyboard

11 wordWrap:是否可换行,默认为false;

加载动态图。例如:

QLabel label;
QMovie *movie = new QMovie("./wait.gif");
label.setMovie(movie);
movie->start();

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    QStringList textList;
    textList << "PlainText" << "RichText" << "AutoText";
    ui->combo_format->addItems(textList);
 }

Widget::~Widget()
{
    delete ui;
}

void Widget::on_lineEdit_editingFinished()
{
    ui->label_display->setText(ui->lineEdit->text());
}

void Widget::on_check_links_toggled(bool checked)
{
    ui->label_display->setOpenExternalLinks(checked);
}

void Widget::on_check_scaled_toggled(bool checked)
{
    ui->label_display->setScaledContents(checked);
}

void Widget::on_check_wordWrap_toggled(bool checked)
{
    ui->label_display->setWordWrap(checked);
}

void Widget::on_spin_indent_valueChanged(int arg1)
{
    ui->label_display->setIndent(arg1);
}

void Widget::on_combo_format_currentIndexChanged(int index)
{
    ui->label->setTextFormat((Qt::TextFormat)index);
}

 

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值