翻譯|使用教程|編輯:龔雪|2024-08-01 10:17:26.077|閱讀 139 次
概述:本文將為大家介紹如何使用Qt Widget小部件如何實(shí)現(xiàn)一個(gè)旋轉(zhuǎn)框示例,歡迎下載最新版組件體驗(yàn)~
# 界面/圖表報(bào)表/文檔/IDE等千款熱門(mén)軟控件火熱銷(xiāo)售中 >>
相關(guān)鏈接:
Qt 是目前最先進(jìn)、最完整的跨平臺(tái)C++開(kāi)發(fā)工具。它不僅完全實(shí)現(xiàn)了一次編寫(xiě),所有平臺(tái)無(wú)差別運(yùn)行,更提供了幾乎所有開(kāi)發(fā)過(guò)程中需要用到的工具。如今,Qt已被運(yùn)用于超過(guò)70個(gè)行業(yè)、數(shù)千家企業(yè),支持?jǐn)?shù)百萬(wàn)設(shè)備及應(yīng)用。
旋轉(zhuǎn)框示例展示了如何使用Qt 中可用的許多不同類型的旋轉(zhuǎn)框,從簡(jiǎn)單的QSpinBox部件到更復(fù)雜的編輯器,如 部件。
Qt技術(shù)交流群:166830288 歡迎一起進(jìn)群討論
 
 
該示例包含一個(gè)Window類,用于顯示Qt中可用的不同基于旋轉(zhuǎn)框的小部件。
Window類繼承了QWidget,并包含兩個(gè)插槽,用于提供交互特性:
class Window : public QWidget
{
Q_OBJECT
public:
Window(QWidget *parent = nullptr);
public slots:
void changePrecision(int decimals);
void setFormatString(const QString &formatString);
private:
void createSpinBoxes();
void createDateTimeEdits();
void createDoubleSpinBoxes();
QDateTimeEdit *meetingEdit;
QDoubleSpinBox *doubleSpinBox;
QDoubleSpinBox *priceSpinBox;
QDoubleSpinBox *scaleSpinBox;
QGroupBox *spinBoxesGroup;
QGroupBox *editsGroup;
QGroupBox *doubleSpinBoxesGroup;
QLabel *meetingLabel;
QSpinBox *groupSeparatorSpinBox;
QDoubleSpinBox *groupSeparatorSpinBox_d;
};
私有函數(shù)用于在窗口中設(shè)置每種類型的旋轉(zhuǎn)框,我們使用成員變量來(lái)跟蹤各種小部件,以便在需要時(shí)重新配置它們。
構(gòu)造函數(shù)只需調(diào)用私有函數(shù)來(lái)設(shè)置示例中使用的不同類型spin box,并將每個(gè)組放在一個(gè)布局中:
Window::Window(QWidget *parent)
: QWidget(parent)
{
createSpinBoxes();
createDateTimeEdits();
createDoubleSpinBoxes();
QHBoxLayout *layout = new QHBoxLayout;
layout->addWidget(spinBoxesGroup);
layout->addWidget(editsGroup);
layout->addWidget(doubleSpinBoxesGroup);
setLayout(layout);
setWindowTitle(tr("Spin Boxes"));
}
我們使用布局來(lái)管理window子部件的排列,并更改window標(biāo)題。
createSpinBoxes() 函數(shù)構(gòu)造了一個(gè) ,并在其中放置了三個(gè) 小部件,這些小部件帶有描述性標(biāo)簽,以指示它們期望的輸入類型。
void Window::createSpinBoxes()
{
spinBoxesGroup = new QGroupBox(tr("Spinboxes"));
QLabel *integerLabel = new QLabel(tr("Enter a value between "
"%1 and %2:").arg(-20).arg(20));
QSpinBox *integerSpinBox = new QSpinBox;
integerSpinBox->setRange(-20, 20);
integerSpinBox->setSingleStep(1);
integerSpinBox->setValue(0);
第一個(gè)旋轉(zhuǎn)框顯示了使用的最簡(jiǎn)單方法,它接受從-20到20的值,當(dāng)前值可以通過(guò)箭頭按鈕或上下鍵增加或減少1,默認(rèn)值為0。
第二個(gè)旋轉(zhuǎn)框使用更大的步長(zhǎng),并顯示后綴,以提供有關(guān)數(shù)字所代表的數(shù)據(jù)類型的更多信息:
QLabel *zoomLabel = new QLabel(tr("Enter a zoom value between "
"%1 and %2:").arg(0).arg(1000));
QSpinBox *zoomSpinBox = new QSpinBox;
zoomSpinBox->setRange(0, 1000);
zoomSpinBox->setSingleStep(10);
zoomSpinBox->setSuffix("%");
zoomSpinBox->setSpecialValueText(tr("Automatic"));
zoomSpinBox->setValue(100);
此旋轉(zhuǎn)框還顯示一個(gè)特殊值,替代為其定義的最小值,這意味著它永遠(yuǎn)不會(huì)顯示0%,但當(dāng)選擇最小值時(shí)將顯示自動(dòng)。
第三個(gè)旋轉(zhuǎn)框顯示了如何使用前綴:
QLabel *priceLabel = new QLabel(tr("Enter a price between "
"%1 and %2:").arg(0).arg(999));
QSpinBox *priceSpinBox = new QSpinBox;
priceSpinBox->setRange(0, 999);
priceSpinBox->setSingleStep(1);
priceSpinBox->setPrefix("$");
priceSpinBox->setValue(99);
為簡(jiǎn)單起見(jiàn),我們展示一個(gè)帶有前綴而沒(méi)有后綴的旋轉(zhuǎn)框,也可以同時(shí)使用這兩種方法。
groupSeparatorSpinBox = new QSpinBox;
groupSeparatorSpinBox->setRange(-99999999, 99999999);
groupSeparatorSpinBox->setValue(1000);
groupSeparatorSpinBox->setGroupSeparatorShown(true);
QCheckBox *groupSeparatorChkBox = new QCheckBox;
groupSeparatorChkBox->setText(tr("Show group separator"));
groupSeparatorChkBox->setChecked(true);
connect(groupSeparatorChkBox, &QCheckBox::toggled, groupSeparatorSpinBox,
&QSpinBox::setGroupSeparatorShown);
QLabel *hexLabel = new QLabel(tr("Enter a value between "
"%1 and %2:").arg('-' + QString::number(31, 16)).arg(QString::number(31, 16)));
QSpinBox *hexSpinBox = new QSpinBox;
hexSpinBox->setRange(-31, 31);
hexSpinBox->setSingleStep(1);
hexSpinBox->setValue(0);
hexSpinBox->setDisplayIntegerBase(16);
QVBoxLayout *spinBoxLayout = new QVBoxLayout;
spinBoxLayout->addWidget(integerLabel);
spinBoxLayout->addWidget(integerSpinBox);
spinBoxLayout->addWidget(zoomLabel);
spinBoxLayout->addWidget(zoomSpinBox);
spinBoxLayout->addWidget(priceLabel);
spinBoxLayout->addWidget(priceSpinBox);
spinBoxLayout->addWidget(hexLabel);
spinBoxLayout->addWidget(hexSpinBox);
spinBoxLayout->addWidget(groupSeparatorChkBox);
spinBoxLayout->addWidget(groupSeparatorSpinBox);
spinBoxesGroup->setLayout(spinBoxLayout);
}
該函數(shù)的其余部分為組框設(shè)置布局,并將每個(gè)小部件放置在其中。
未完待續(xù),更多內(nèi)容敬請(qǐng)期待......
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@ke049m.cn
文章轉(zhuǎn)載自:慧都網(wǎng)