Di Qt, saya bisa mendapatkan selected text
dari a QComboBox
dengan menggunakan
combobox->currentText()
metode ini. Bagaimana saya bisa mendapatkan selected value
?
Saya mencari bantuan tetapi saya tidak dapat menemukan metode currentData()
yang saya harapkan dapat ditemukan. Saya hanya bisa menemukancombobox->currentIndex()
Apakah ada cara yang lebih cerdas untuk melakukannya selain combobox->itemData(combobox->currentIndex())
?
Pembaruan: Ini tidak lagi diperlukan pada Qt 5. currentData()
Metode telah ditambahkan http://doc.qt.io/qt-5/qcombobox.html#currentData-prop
combobox->itemData(combobox->currentIndex())
ilegal !!! Kenapa?currentIndex = -1
. Ini akan mengembalikan data dari indeks terakhir atau memunculkan kesalahan jika QComboBox kosong.Yang ini bisa mendapatkan teks indeks saat ini:
sumber
currentText
adalah apa yang sudah diketahui OP ...Anda dapat mengatur data QVariant untuk semua item, kemudian Anda bisa mendapatkan nilainya saat Anda membutuhkannya.
ada contoh kode untuk situasi ini:
ui.comboBoxSheetSize->addItem("128 m", QVariant(128)); ui.comboBoxSheetSize->addItem("256 m", QVariant(256)); ui.comboBoxSheetSize->addItem("512 m", QVariant(512)); ui.comboBoxSheetSize->addItem("1024 m", QVariant(1024)); ... void Page::onComboSheetSizeChanged( int index ) { int value = ui.comboBoxSheetSize->itemData(index).toInt(); }
Ngomong-ngomong, saya rasa saya salah paham dengan pertanyaan Anda. Saya pikir cara Anda mendapatkan data cukup pintar?
sumber
Fungsi anggota QComboBox :: currentData telah ditambahkan sejak pertanyaan ini diajukan, lihat komit ini
sumber
Saya memiliki masalah yang sama
Saya telah menyelesaikannya dengan
sumber
Ini adalah kode OK saya di QT 4.7:
//add combobox list QString val; ui->startPage->clear(); val = "http://www.work4blue.com"; ui->startPage->addItem(tr("Navigation page"),QVariant::fromValue(val)); val = "https://www.google.com"; ui->startPage->addItem("www.google.com",QVariant::fromValue(val)); val = "www.twitter.com"; ui->startPage->addItem("www.twitter.com",QVariant::fromValue(val)); val = "https://www.youtube.com"; ui->startPage->addItem("www.youtube.com",QVariant::fromValue(val)); // get current value qDebug() << "current value"<< ui->startPage->itemData(ui->startPage->currentIndex()).toString();
sumber
Saya heran tidak ada sinyal yang diaktifkan dan memiliki masalah yang sama. Saya menyelesaikannya dengan membuat subclass QComboBox. Saya pikir lebih baik untuk menghindari akses langsung ke objek dan memanggil fungsinya karena itu berarti penggandengan yang lebih erat dan bertentangan dengan filosofi Qt. Jadi, inilah kelas yang saya buat yang cocok untuk saya.
class SmartComboBox : public QComboBox { Q_OBJECT private slots: void triggerVariantActivated(int index); public: SmartComboBox(QWidget *parent); signals: void activated(const QVariant &); };
Dan implementasinya
void SmartComboBox::triggerVariantActivated(int index) { activated(itemData(index)); } SmartComboBox::SmartComboBox(QWidget *parent) :QComboBox(parent) { connect(this, SIGNAL(activated(int)), this, SLOT(triggerVariantActivated(int))); }
sumber
Pertanyaannya sudah lama, tapi mungkin, seseorang membutuhkan jawaban yang sebenarnya.
Di QGIS 3.4 Anda bisa mendapatkan nilai dari metode
QComboBox
withcurrentData()
.Contoh:
comboBox.currentData()
Tautan: https://doc.qt.io/qt-5/qcombobox.html#currentData-prop
sumber
Saya melakukan ini
QDir path("/home/user/"); QStringList _dirs = path.entryList(QDir::Dirs); std::cout << "_dirs_count = " << _dirs.count() << std::endl; ui->cmbbox->addItem(Files); ui->cmbbox->show();
Anda akan melihat dengan ini bahwa QStringList bernama _dirs terstruktur seperti array yang anggotanya dapat Anda akses melalui indeks hingga nilai yang dikembalikan oleh _dirs.count ()
sumber
Saya memiliki masalah dan
memecahkan ini.
sumber
jika Anda mengembangkan plugin QGIS maka cukup
sumber
VALUE
. DipilihTEXT
, dipilihVALUE
dan dipilihINDEX
adalah hal yang sama sekali berbeda. Hanya secara kebetulan mungkinindex
sama denganvalue
. Jika orang ingin menggunakan kombo, mereka perlu mempelajari dan memahami perbedaannya. Dan untuk pemahaman terbaik saya, di Qt, NILAI sedikit diperpanjang saat menggunakan model data.Saya tahu saya sangat terlambat tetapi bagi mereka yang masih memiliki masalah itu, itu bisa diselesaikan dengan mudah. Saya menggunakan Qt 5.3 dan berfungsi dengan baik. Tidak perlu membuat fungsi atau semua itu.
int valueComboBox; valueComboBox = comboBox->currentIndex();
dan berhasil! Semoga membantu!
sumber
Saya mengonfirmasi cara termudah adalah dengan melakukan ini:
uiAnalyseAssets::AnalyseAssets(QWidget *parent) : QWidget(parent) { ui.comboBox->addItem("text1"); ui.comboBox->addItem("text2"); ... } void mainFunction::yourFunction( int index ) { int value = ui.comboBox->currentText(); }
sumber
QComboBox::currentText()
mengembalikanQString
? Bagaimana Anda sampai pada sesuatu yang masuk akalint
? Dan apa yang ingin Anda lakukan dengan parameter Andaint index
?