|
|
  |
Простой вопрос qt |
|
|
|
Jun 13 2011, 16:53
|
Гуру
     
Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923

|
Подскажите как передать сигнал в слот,компилируется без ошибок, но не чего не происходит при нажатии кнопки. Код #include "mainwindow.h" #include "ui_mainwindow.h" #include <QtCore/QProcess> #include <QtGui/QPushButton>
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this);
QMainWindow *MainWindow; QPushButton *pushButton; QObject::connect(pushButton, SIGNAL(clicked()), MainWindow, SLOT(buttonclic()) );
}
int ii = 0;
void MainWindow::buttonclic(){ ui->progressBar->setValue(ii); ii++;
}
MainWindow::~MainWindow() {
delete ui; } Сделал так работает, не знаю насколько правильно, где правильнее разместить QObject::connect... ? Код #include "mainwindow.h" #include "ui_mainwindow.h" #include <QtCore/QProcess> #include <QtGui/QPushButton>
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); QObject::connect(ui->pushButton, SIGNAL(clicked()),this, SLOT(buttonclic()) );
}
int ii = 0;
void MainWindow::buttonclic(){ ui->progressBar->setValue(ii); ii++;
}
MainWindow::~MainWindow() {
delete ui; }
Сообщение отредактировал sergey sva - Jun 13 2011, 16:53
|
|
|
|
|
Jun 13 2011, 21:27
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
QUOTE (sergey sva @ Jun 13 2011, 19:53)  но не чего не происходит при нажатии кнопки. CODE QMainWindow *MainWindow; QPushButton *pushButton; QObject::connect(pushButton, SIGNAL(clicked()), MainWindow, SLOT(buttonclic()) ); Вы создали два указателя, которые без инициализации показывают куда угодно, только не на реальные объекты. Более того, в момент выхода из этой функции эти указатели будут уничтожены.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Jun 14 2011, 12:20
|
Местный
  
Группа: Свой
Сообщений: 437
Регистрация: 27-08-04
Пользователь №: 551

|
QUOTE (sergey sva @ Jun 13 2011, 19:53)  где правильнее разместить QObject::connect... ? Если слоты сигналы применяются для связывания класса-интерфейса (обычно в имени присутствуе View) с QtGui, то логично разместить коннект в конструкторе этого класса, после того,как будут созданы все интерфейсные объекты. Если речь идет о связывании пользовательских (ваших) объектов между собой (реализация логики работы приложения), то я обычно стараюсь размещать коннекты в конструкторе главного окна (если речь идет гуи пиложении), после создания и инициализации этих объектов. Ну и разумеется в процессе работы вы можете использовать дисконнекты\коннекты для изменения поведения, где этого требует логика приложения. И небольшой совет: включите консоль в дебаг версии. Если ядро не сможет связать сигнал и слот, вы получите сообщение.
|
|
|
|
|
Jun 14 2011, 14:59
|
Местный
  
Группа: Свой
Сообщений: 437
Регистрация: 27-08-04
Пользователь №: 551

|
QUOTE (sergey sva @ Jun 14 2011, 17:26)  Конструктор главного вы имеете ввиду mainwindow.h или mainwindow.ui ? Я имел ввиду наследника QMainWindow. В данном случае это class QLWin CODE namespace App {
class QLWin : public QMainWindow { Q_OBJECT
public: typedef QSharedPointer<QLWin> Ptr;
static const int BIG_SPACE = 44; static const int SMALL_SPACE = 15; static QSize rightSize();
QLWin(QWidget* parent);
private slots: void captureFinished();
private: void closeEvent(QCloseEvent* event);
Excitation::ExcitationView* _excitView; JackWrap::Wrapper* _jack; Capture::Capture* _capture; Capture::CaptureView* _captureView; Irs::IrsTableModel* _irsTableModel; Irs::IrsView* _irsView; Dir::WrkDirView* _dirView; };
} А в конструкторе все склеивается CODE QLWin::QLWin(QWidget* parent) : QMainWindow(parent) , _excitView(new Excitation::ExcitationView(this)) , _jack(new JackWrap::Wrapper(this)) , _capture(new Capture::Capture(this)) , _captureView(new Capture::CaptureView(this, _capture)) , _irsTableModel(new Irs::IrsTableModel(this)) , _irsView(new Irs::IrsView(this, _irsTableModel)) , _dirView(new Dir::WrkDirView(this)) { setWindowTitle("QLoud");
QVBoxLayout* mainLayout = new QVBoxLayout();
mainLayout->addWidget(_dirView); mainLayout->addWidget(_excitView); mainLayout->addWidget(_captureView); mainLayout->addWidget(_irsView);
//--------------------- LAYOUT FINISHING ------------------------------------------------------------- QWidget* centralWidget = new QWidget(); centralWidget->setLayout(mainLayout); setCentralWidget(centralWidget);
connect(_jack, SIGNAL(jackIsFinished(float)), _capture, SLOT(stop(float))); connect(_jack, SIGNAL(jackSampleRate(unsigned int)),_captureView, SLOT(onJackSampleRate(unsigned int))); connect(_jack, SIGNAL(jackSampleRate(unsigned int)),_excitView, SLOT(rateChanged(unsigned int))); connect(_jack, SIGNAL(jackShutdown()), _captureView, SLOT(onJackShutdown())); connect(_jack, SIGNAL(JackXRun()), _captureView, SLOT(onJackXRun()));
connect(_captureView, SIGNAL(startCapturing(const bool)), _dirView, SLOT(setDisable(const bool)));
connect(_capture, SIGNAL(evStartJack(JackWrap::Info&)), _jack, SLOT(start(JackWrap::Info&))); connect(_captureView, SIGNAL(evStopCapture()), _jack, SLOT(stop())); connect(_captureView, SIGNAL(startCapturing_()), _jack, SLOT(connect())); connect(_jack, SIGNAL(JackIsReady()), _excitView, SLOT(checkSignal()));
connect(_excitView, SIGNAL(ExitationViewIsReady()), _captureView, SLOT(startCapture())); connect(_excitView, SIGNAL(abortCapture()), _captureView, SLOT(stopCapture()));
connect(_jack, SIGNAL(JackIsFailed()), _captureView, SLOT(stopCapture())); connect(_capture, SIGNAL(CaptureIsFailed()), _captureView, SLOT(stopCapture()));
//Status Bar connect(_dirView, SIGNAL(showStatus(const QString&)), statusBar(),SLOT(showMessage(const QString&))); connect(_dirView, SIGNAL(showStatus(const QString&, int)),statusBar(),SLOT(showMessage(const QString&,int))); connect(_irsView, SIGNAL(showStatus(const QString&, int)),statusBar(),SLOT(showMessage(const QString&,int))); connect(_irsTableModel,SIGNAL(showStatus(const QString&, int)),statusBar(),SLOT(showMessage(const QString&,int))); connect(_excitView, SIGNAL(showStatus(const QString&)), statusBar(),SLOT(showMessage(const QString&))); connect(_excitView, SIGNAL(showStatus(const QString&, int)),statusBar(),SLOT(showMessage(const QString&,int))); connect(_captureView, SIGNAL(showStatus(const QString&)), statusBar(),SLOT(showMessage(const QString&))); connect(_captureView, SIGNAL(showStatus(const QString&, int)),statusBar(),SLOT(showMessage(const QString&,int))); // Capture connect(_capture, SIGNAL(workIsDone()), this, SLOT(captureFinished()));
App::AppConfig::getInstance().notifyObservers(); //notify about current dir
// _jack->connect(); resize(App::AppConfig::getInstance().getSize()); move(App::AppConfig::getInstance().getPos()); }
|
|
|
|
|
Jun 15 2011, 19:36
|
Местный
  
Группа: Свой
Сообщений: 437
Регистрация: 27-08-04
Пользователь №: 551

|
QUOTE (sergey sva @ Jun 15 2011, 21:47)  Спасибо все понял  есть еще вопрос как в QT открыть ком порт это наверно будет не правильно fopen("/dev/tty", "r"); ? Я в Qt пока не работал с портами. Но я бы попытался использовать все сущности в "портабельной" Qt-манере. Как пример QSerialDevice – a cross-platform library for serial devices framework that uses Qt4. Тот код, что я приводил выше - проект QLoud. Изначально был сделан автором под линукс и совершенно не планировался для вин32. Это аудио приложение использует дисковые операции для аудиофайлов, библиотеку фурье анализа, построение графиков, ввод вывод аудио данных и тд. Благодаря тому, что все компоненты приложения были изначально сделаны портабельными, я собрал вин32 таргет за час полтора (это вместе с закачкой и чтением ридми). В ближайшем будущем планирую в аналоговом разделе выложить сборку вин32 для пробы.
|
|
|
|
|
Jun 16 2011, 07:11
|
Местный
  
Группа: Свой
Сообщений: 353
Регистрация: 11-09-06
Из: Минск
Пользователь №: 20 282

|
Цитата(sergey sva @ Jun 15 2011, 23:44)  Прочитаю про библиотеку QSerialDevice. А с PCI устройством наверно только через fopen("...", "r"); или тоже есть библиотеки QT ? Кросплатформенный класс для работы с серийным портом в Qt. (работал с ним в винде, хотя с линухой всё должно быть ещё проще). http://sourceforge.net/projects/qextserialport/Дока - исчерпывающая: http://code.google.com/p/qextserialport/downloads/list
|
|
|
|
|
Jun 17 2011, 08:16
|
Гуру
     
Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847

|
Цитата(sergey sva @ Jun 16 2011, 15:23)  Все таки как правильно работать c pci устройством?, сделали драйвер подгрузили зарегистрировали в папке /dev появилось устройство mydevicepci как теперь его открыть?, в винде понятно через createfile() а в линуксе open() Цитата в голову кроме fopen не чего не приходит Это от драйвера зависит. Если read/write достаточно, то и fopen подойдет Цитата и qt как правильно это сделать? QFile вместо fopen
|
|
|
|
|
  |
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|