请问,怎样实现这个功能,当点击红框内任意位置,就会打印被点击的语言,并且打钩就会转移到被点击那一栏的后面,(想要信号与槽函数做,有其他方法也可以)
还有麻烦写出代码;
下面是一个基础的解决方案:
#include <QApplication>
#include <QListWidget>
#include <QListWidgetItem>
#include <QVBoxLayout>
#include <QDebug>
class LanguageSelector : public QWidget {
public:
LanguageSelector(QWidget *parent = nullptr) : QWidget(parent) {
QVBoxLayout *layout = new QVBoxLayout(this);
listWidget = new QListWidget(this);
layout->addWidget(listWidget);
QListWidgetItem *item1 = new QListWidgetItem("简体中文 √", listWidget);
QListWidgetItem *item2 = new QListWidgetItem("English", listWidget);
// 默认选择第一项
listWidget->setCurrentItem(item1);
connect(listWidget, &QListWidget::itemClicked, this, &LanguageSelector::onItemClicked);
}
private slots:
void onItemClicked(QListWidgetItem *item) {
qDebug() << "Language Selected:" << item->text();
for (int i = 0; i < listWidget->count(); ++i) {
QListWidgetItem *eachItem = listWidget->item(i);
QString text = eachItem->text();
text = text.remove(" √");
eachItem->setText(text);
}
item->setText(item->text() + " √");
}
private:
QListWidget *listWidget;
};
int main(int argc, char *argv[]) {
QApplication a(argc, argv);
LanguageSelector w;
w.show();
return a.exec();
}
这这个代码也假设 "√" 是用来表示当前选择的语言的,如果你要一个不同的表示方式,那么你可能需要修改这个代码。
打印被点击的语言?
你这个是什么控件
#include <QtWidgets>
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr)
: QMainWindow(parent)
{
QPushButton *button = new QPushButton("Click Me", this);
QLabel *label = new QLabel(this);
connect(button, &QPushButton::clicked, this, &MainWindow::onButtonClicked);
QVBoxLayout *layout = new QVBoxLayout;
layout->addWidget(button);
layout->addWidget(label);
QWidget *centralWidget = new QWidget(this);
centralWidget->setLayout(layout);
setCentralWidget(centralWidget);
}
private slots:
void onButtonClicked()
{
QPushButton *button = qobject_cast<QPushButton*>(sender());
QString buttonText = button->text();
qDebug() << buttonText;
// 设置标签控件的图标为一个打勾的图标
QPixmap pixmap(":/path/to/check_icon.png");
label->setPixmap(pixmap);
}
private:
QLabel *label;
};
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
#include "main.moc"
图标路径(":/path/to/check_icon.png")需要替换为你实际使用的图标路径。
需求详细点,然后用什么语言实现
提供小小示例,示例中创建四个 QPushButton 控件,并将它们按照一定的布局排放到了一个 QMainWindow 窗口中。然后定义一个 Languages 类,该类继承自 QObject 类,它只有一个 printSelectedLanguage() 槽函数。这个槽函数用于打印当前选中的语言。在 printSelectedLanguage() 函数中,遍历所有 QPushButton 控件,找到当前被选中的控件,并调用它的 print() 函数打印它的文本。需要注意的是,在每个 QPushButton 控件被点击时,它的 isChecked() 函数会返回 true,因此可以通过遍历所有 QPushButton 控件来判断当前被选中的是哪个控件。
#include <QApplication>
#include <QPushButton>
#include <QObject>
#include <QPrintDialog>
class Languages : public QObject {
Q_OBJECT
public:
Languages() : QObject() {
// 创建四个 QPushButton 控件并设置初始状态
englishBtn = new QPushButton("English", this);
frenchBtn = new QPushButton("French", this);
germanBtn = new QPushButton("German", this);
spanishBtn = new QPushButton("Spanish", this);
englishBtn->setChecked(true);
}
public slots:
void printSelectedLanguage() {
// 获取当前选中的 QPushButton 控件并打印它的文本
QPushButton* selectedBtn = nullptr;
for (QPushButton* btn : {englishBtn, frenchBtn, germanBtn, spanishBtn}) {
if (btn->isChecked()) {
selectedBtn = btn;
break;
}
}
if (selectedBtn) {
selectedBtn->print();
}
}
private:
QPushButton* englishBtn;
QPushButton* frenchBtn;
QPushButton* germanBtn;
QPushButton* spanishBtn;
};
int main(int argc, char* argv[]) {
QApplication app(argc, argv);
// 创建 Languages 对象并连接 signals 和 slots
Languages lang;
QObject::connect(englishBtn, &QPushButton::clicked, &lang, &Languages::printSelectedLanguage);
QObject::connect(frenchBtn, &QPushButton::clicked, &lang, &Languages::printSelectedLanguage);
QObject::connect(germanBtn, &QPushButton::clicked, &lang, &Languages::printSelectedLanguage);
QObject::connect(spanishBtn, &QPushButton::clicked, &lang, &Languages::printSelectedLanguage);
// 自适应窗口大小并显示窗口
QMainWindow window;
window.setCentralWidget(&lang);
window.resize(QApplication::desktop()->size());
window.show();
return app.exec();
}
#如有帮助,恭请采纳
你说的和这个功能的重点应该是移动位置,勾选和点击事件你应该都会。 那要实现打钩就会转移到被点击那一栏的后面,首先需要获取到点击位置的组件的索引,
# 获取点击的按钮索引
index = self.layout().indexOf(self.sender())
然后将按钮移动到被点击那一栏的后面:
# 将按钮移动到被点击那一栏的后面
sender().setParent(self.layout().itemAt(index).widget())
sender().setGeometry(self.layout().itemAt(index).widget().geometry())
sender().setFlags(Qt.ItemIsUserCheckable | Qt.ItemIsUserTristate | Qt.ItemIsEnabled)
sender().setCheckState(Qt.Checked)
可以使用QButtonGroup和信号与槽函数来实现