Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Sahsa от Июнь 24, 2016, 14:24



Название: ComboBox
Отправлено: Sahsa от Июнь 24, 2016, 14:24
Всем Привет.
У меня такой вопрос. Я создаю форму с QComboBox и хочу в дальнейшем ее пополнять через слот, но у меня не добавляется элемент.
Если делать в конструкторе, то все хорошо.
Вот код:
TableDialog::TableDialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::TableDialog)
{
    ui->setupUi(this);

    ui->comboBox->addItem("Первый"); // Это для проверки
    ui->comboBox->addItem("Второй");  // Это для проверки
}

void TableDialog::addItemTableDialog(QString str)
{
    ui->comboBox->addItem(str); // <-- не хочет добавлять в конец списка =(((


Название: Re: ComboBox
Отправлено: gil9red от Июнь 24, 2016, 14:50
Используйте форматирование кода.
Код вроде бы правильный.
Метод addItemTableDialog вообще вызывается?


Название: Re: ComboBox
Отправлено: kambala от Июнь 24, 2016, 14:55
этот метод объявлен как слот?


Название: Re: ComboBox
Отправлено: Bepec от Июнь 24, 2016, 15:15
Полный код и тогда всё станет ясно.


Название: Re: ComboBox
Отправлено: Sahsa от Июнь 24, 2016, 16:23
этот метод объявлен как слот?

Да)


Название: Re: ComboBox
Отправлено: Sahsa от Июнь 24, 2016, 16:26
Полный код и тогда всё станет ясно.

Код:
namespace Ui {
class TableDialog;
}

class TableDialog : public QDialog
{
    Q_OBJECT

public:
    explicit TableDialog(QWidget *parent = 0);
    ~TableDialog();

private:
    Ui::TableDialog *ui;

private slots:
    void addItemTableDialog(const QString &str);
};
+ прошлое


Название: Re: ComboBox
Отправлено: Sahsa от Июнь 24, 2016, 16:31
Используйте форматирование кода.
Код вроде бы правильный.
Метод addItemTableDialog вообще вызывается?

Не совсем понимаю последний вопрос(


Название: Re: ComboBox
Отправлено: Bepec от Июнь 24, 2016, 16:37
У вас нет вызова слота addItemTableDialog.
Т.е. он никогда не вызывается и следственно не выполняется.

Если вы связываете в ui файле, то предоставьте ui файл :) Он тоже входит в понятие полного кода :)


Название: Re: ComboBox
Отправлено: Sahsa от Июнь 24, 2016, 18:42
У вас нет вызова слота addItemTableDialog.
Т.е. он никогда не вызывается и следственно не выполняется.

Если вы связываете в ui файле, то предоставьте ui файл :) Он тоже входит в понятие полного кода :)

Код:
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>TableDialog</class>
 <widget class="QDialog" name="TableDialog">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>485</width>
    <height>85</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>Dialog</string>
  </property>
  <layout class="QGridLayout" name="gridLayout">
   <item row="0" column="0">
    <layout class="QVBoxLayout" name="verticalLayout">
     <item>
      <widget class="QComboBox" name="comboBox">
       <property name="minimumSize">
        <size>
         <width>50</width>
         <height>25</height>
        </size>
       </property>
       <property name="maximumSize">
        <size>
         <width>16777215</width>
         <height>25</height>
        </size>
       </property>
       <property name="insertPolicy">
        <enum>QComboBox::InsertAtCurrent</enum>
       </property>
      </widget>
     </item>
     <item>
      <widget class="QDialogButtonBox" name="buttonBox">
       <property name="orientation">
        <enum>Qt::Horizontal</enum>
       </property>
       <property name="standardButtons">
        <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
       </property>
      </widget>
     </item>
    </layout>
   </item>
  </layout>
 </widget>
 <resources/>
 <connections>
  <connection>
   <sender>buttonBox</sender>
   <signal>accepted()</signal>
   <receiver>TableDialog</receiver>
   <slot>accept()</slot>
   <hints>
    <hint type="sourcelabel">
     <x>248</x>
     <y>254</y>
    </hint>
    <hint type="destinationlabel">
     <x>157</x>
     <y>274</y>
    </hint>
   </hints>
  </connection>
  <connection>
   <sender>buttonBox</sender>
   <signal>rejected()</signal>
   <receiver>TableDialog</receiver>
   <slot>reject()</slot>
   <hints>
    <hint type="sourcelabel">
     <x>316</x>
     <y>260</y>
    </hint>
    <hint type="destinationlabel">
     <x>286</x>
     <y>274</y>
    </hint>
   </hints>
  </connection>
 </connections>
</ui>

(http://)


Название: Re: ComboBox
Отправлено: Bepec от Июнь 24, 2016, 19:20
У вас в коде НИГДЕ не вызывается данный слот. Вообще нигде.
Чтобы он сработал, его нужно вызвать или связать с каким-либо сигналом.
Сам по себе он работать не будет.

Это как кнопка - она есть, но её нужно нажать :)


Название: Re: ComboBox
Отправлено: Sahsa от Июнь 24, 2016, 19:25
У вас в коде НИГДЕ не вызывается данный слот. Вообще нигде.
Чтобы он сработал, его нужно вызвать или связать с каким-либо сигналом.
Сам по себе он работать не будет.

Это как кнопка - она есть, но её нужно нажать :)

слот связон с другим классом и он вызывается, я запускал по шагам)


Название: Re: ComboBox
Отправлено: Bepec от Июнь 24, 2016, 19:27
Если он вызывается, значит срабатывает. А как вы определяете что он не работает? :)

PS полный код - это полный код, со всеми классами, файлами, ресурсами, файлом проекта. Который позволяет узнать такие вот "другой класс" подробности, не переписываясь :)

PPS наличие полного кода в архиве с файлом проекта гарантирует вам помощь в кратчайшие сроки :) А всё остальное - заслуга телепатии и лукавого :D


Название: Re: ComboBox
Отправлено: Sahsa от Июнь 24, 2016, 19:31
Если он вызывается, значит срабатывает. А как вы определяете что он не работает? :)

PS полный код - это полный код, со всеми классами, файлами, ресурсами, файлом проекта. Который позволяет узнать такие вот "другой класс" подробности, не переписываясь :)

там все хорошо, передается строка и она принимается. Дополнительно делал список и заполнял его, так список заполняется (QStringList), а самом ComboBox нечего не идет. Если все в конструкторе создать, то тогда отлично, но мне нужно его пополнять в течении выполнения программы.


Название: Re: ComboBox
Отправлено: Sahsa от Июнь 24, 2016, 19:40
Если он вызывается, значит срабатывает. А как вы определяете что он не работает? :)

PS полный код - это полный код, со всеми классами, файлами, ресурсами, файлом проекта. Который позволяет узнать такие вот "другой класс" подробности, не переписываясь :)

PPS наличие полного кода в архиве с файлом проекта гарантирует вам помощь в кратчайшие сроки :) А всё остальное - заслуга телепатии и лукавого :D

Дополнительно проверил сейчас и вставил в слот дополнительный код
Код:
void TableDialog::addItemTableDialog(QString str)
{
    ui->comboBox->addItem(str);
    QFile file("C:/log.txt");
    QTextStream out(&file);
    if (file.open(QIODevice::WriteOnly)) {
        //file.write(str);
        out<<"OK: " <<str;
    }
    file.close();
}

Так вот, в файл он все записывает мне, а вот строку в ComboBox не добавляет


Название: Re: ComboBox
Отправлено: Bepec от Июнь 24, 2016, 19:53
PPS наличие полного кода в архиве с файлом проекта гарантирует вам помощь в кратчайшие сроки :) А всё остальное - заслуга телепатии и лукавого :D