QT调色板之QPushbutton true 和 false 的运用

    技术2023-05-27  41

    头文件 #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QPushButton> #include "QDebug" QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } QT_END_NAMESPACE class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(QWidget *parent = nullptr); ~MainWindow(); private: Ui::MainWindow *ui; QPushButton *btn[10]; int curBtn; int beforeBtn; public slots: void readSlide(); void setSlide(); void cBtn1Click(); void cBtn2Click(); void cBtn3Click(); void cBtn4Click(); void cBtn5Click(); void cBtn6Click(); void cBtn7Click(); void cBtn8Click(); void cBtn9Click(); void cBtn10Click(); void cBtnChanged(int i); void changeCur(); signals: void cBtn1Clicked(int value); void cBtn2Clicked(int value); void cBtn3Clicked(int value); void cBtn4Clicked(int value); void cBtn5Clicked(int value); void cBtn6Clicked(int value); void cBtn7Clicked(int value); void cBtn8Clicked(int value); void cBtn9Clicked(int value); void cBtn10Clicked(int value); }; #endif // MAINWINDOW_H main.c #include "mainwindow.h" #include <QApplication> int main(int argc, char *argv[]) { QApplication a(argc, argv); MainWindow w; w.show(); return a.exec(); } cpp mainwindow.cpp #include "mainwindow.h" #include "ui_mainwindow.h" #include <string> /**** 调色板,基本完美 ****/ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { curBtn =0; ui->setupUi(this); btn[0]=ui->cBtn_1; ui->cBtn_1->setChecked(true); //默认第一个选中 qDebug() << "-----++++0------" <<btn[0]->isChecked() ; btn[1]=ui->cBtn_2; btn[2]=ui->cBtn_3; btn[3]=ui->cBtn_4; btn[4]=ui->cBtn_5; btn[5]=ui->cBtn_6; btn[6]=ui->cBtn_7; btn[7]=ui->cBtn_8; btn[8]=ui->cBtn_9; btn[9]=ui->cBtn_10; connect(ui->redHorSlider,&QAbstractSlider::sliderMoved,this,&MainWindow::readSlide); connect(ui->greenHorSlider,&QAbstractSlider::sliderMoved,this,&MainWindow::readSlide); connect(ui->blueHorSlider,&QAbstractSlider::sliderMoved,this,&MainWindow::readSlide); connect(ui->redLdt,&QLineEdit::textEdited,this,&MainWindow::setSlide); connect(ui->greenLdt,&QLineEdit::textEdited,this,&MainWindow::setSlide); connect(ui->blueLdt,&QLineEdit::textEdited,this,&MainWindow::setSlide); /*按键信号与槽*/ connect(ui->cBtn_1,&QPushButton::clicked,this,&MainWindow::cBtn1Click); connect(ui->cBtn_2,&QPushButton::clicked,this,&MainWindow::cBtn2Click); connect(ui->cBtn_3,&QPushButton::clicked,this,&MainWindow::cBtn3Click); connect(ui->cBtn_4,&QPushButton::clicked,this,&MainWindow::cBtn4Click); connect(ui->cBtn_5,&QPushButton::clicked,this,&MainWindow::cBtn5Click); connect(ui->cBtn_6,&QPushButton::clicked,this,&MainWindow::cBtn6Click); connect(ui->cBtn_7,&QPushButton::clicked,this,&MainWindow::cBtn7Click); connect(ui->cBtn_8,&QPushButton::clicked,this,&MainWindow::cBtn8Click); connect(ui->cBtn_9,&QPushButton::clicked,this,&MainWindow::cBtn9Click); connect(ui->cBtn_10,&QPushButton::clicked,this,&MainWindow::cBtn10Click); connect(this,&MainWindow::cBtn1Clicked,this,&MainWindow::cBtnChanged); connect(this,&MainWindow::cBtn2Clicked,this,&MainWindow::cBtnChanged); connect(this,&MainWindow::cBtn3Clicked,this,&MainWindow::cBtnChanged); connect(this,&MainWindow::cBtn4Clicked,this,&MainWindow::cBtnChanged); connect(this,&MainWindow::cBtn5Clicked,this,&MainWindow::cBtnChanged); connect(this,&MainWindow::cBtn6Clicked,this,&MainWindow::cBtnChanged); connect(this,&MainWindow::cBtn7Clicked,this,&MainWindow::cBtnChanged); connect(this,&MainWindow::cBtn8Clicked,this,&MainWindow::cBtnChanged); connect(this,&MainWindow::cBtn9Clicked,this,&MainWindow::cBtnChanged); connect(this,&MainWindow::cBtn10Clicked,this,&MainWindow::cBtnChanged); connect(ui->changeBtn,&QPushButton::clicked,this,&MainWindow::changeCur); } MainWindow::~MainWindow() { delete ui; } void MainWindow::readSlide() { int red=ui->redHorSlider->value(); int green=ui->greenHorSlider->value(); int blue=ui->blueHorSlider->value(); ui->redLdt->setText(QString::number(red)); ui->greenLdt->setText(QString::number(green)); ui->blueLdt->setText(QString::number(blue)); QString color=QString("background-color:rgb(%1,%2,%3);").arg(red).arg(green).arg(blue); ui->colorLab->setStyleSheet(color); } void MainWindow::setSlide() { int red=ui->redLdt->text().toInt(); int green=ui->greenLdt->text().toInt(); int blue=ui->blueLdt->text().toInt(); ui->redHorSlider->setSliderPosition(red); ui->greenHorSlider->setSliderPosition(green); ui->blueHorSlider->setSliderPosition(blue); QString color=QString("background-color:rgb(%1,%2,%3);").arg(red).arg(green).arg(blue); ui->colorLab->setStyleSheet(color); } void MainWindow::cBtn1Click() { //qDebug() << "+++++++++++++" ; emit cBtn1Clicked(0); } void MainWindow::cBtn2Click() { emit cBtn2Clicked(1); } void MainWindow::cBtn3Click() { emit cBtn3Clicked(2); } void MainWindow::cBtn4Click() { emit cBtn4Clicked(3); } void MainWindow::cBtn5Click() { emit cBtn5Clicked(4); } void MainWindow::cBtn6Click() { emit cBtn6Clicked(5); } void MainWindow::cBtn7Click() { emit cBtn7Clicked(6); } void MainWindow::cBtn8Click() { emit cBtn8Clicked(7); } void MainWindow::cBtn9Click() { emit cBtn9Clicked(8); } void MainWindow::cBtn10Click() { emit cBtn10Clicked(9); } void MainWindow::cBtnChanged(int i) { qDebug() << "------------" ; // btn[curBtn]->setChecked(false); qDebug() << "-----++++------" <<btn[i]->isChecked() ; //有阴影是true if( curBtn == i &&btn[i]->isChecked() == true) { //beforeBtn = curBtn; //btn[curBtn]->setChecked(false); curBtn = i; } else { //若选中不是同一个,之前的阴影消失 btn[curBtn]->setChecked(false); curBtn = i; btn[i]->setChecked(true); } // qDebug() << "-----++++------" << btn[curBtn]->isChecked() ; btn[curBtn]->setChecked(true); //qDebug() << "-----++++---++--" << btn[curBtn]->isChecked(); std::string oriColor,oriRed,oriGreen,oriBlue; oriColor=btn[i]->styleSheet().toStdString(); qDebug() << btn[i]->styleSheet(); /*提取原来存放的RGB只*/ unsigned int num=0,a=0,c=0; unsigned int b[2]; int j=0; for(;num<oriColor.size();num++) { if(oriColor[num]=='(') a=num; if(oriColor[num]==',') { b[j]=num; qDebug() << " j=" << j << endl; j++; } if(oriColor[num]==')') { c=num; } } for(unsigned int x=0;(a+1)<=b[0];a++,x++) { oriRed[x]=oriColor[a+1]; } for(unsigned int x=0;(b[0]+1)<=b[1];b[0]++,x++) { oriGreen[x]=oriColor[b[0]+1]; } for(unsigned int x=0;(b[1]+1)<=c;b[1]++,x++) { oriBlue[x]=oriColor[b[1]+1]; } /* string to int */ int R=stoi(oriRed); int G=stoi(oriGreen); int B=stoi(oriBlue); // if(R==255&&G==255&&B==255) // { // int red=ui->redLdt->text().toInt(); // int green=ui->greenLdt->text().toInt(); // int blue=ui->blueLdt->text().toInt(); // QString color=QString("background-color:rgb(%1,%2,%3);").arg(red).arg(green).arg(blue); // btn[i]->setStyleSheet(color); // } // else { ui->colorLab->setStyleSheet(QString::fromStdString(oriColor)); ui->redHorSlider->setSliderPosition(R); ui->greenHorSlider->setSliderPosition(G); ui->blueHorSlider->setSliderPosition(B); ui->redLdt->setText(QString::number(R)); ui->greenLdt->setText(QString::number(G)); ui->blueLdt->setText(QString::number(B)); // } } void MainWindow::changeCur() { QString color; color=ui->colorLab->styleSheet(); btn[curBtn]->setStyleSheet(color); btn[curBtn]->setChecked(false); //按下确定后,阴影消失,自动curBtn++ if(++curBtn ==10) { curBtn = 0; btn[curBtn]->setChecked(true); } else { btn[curBtn]->setChecked(true); } }

    效果图:

    Processed: 0.011, SQL: 8