У меня ещё вопрос появился. Помогите пожалуйста. Как сделать чтобы форма наследованная от QScrollArea скролировала саму себя?
Я эту форму отображаю внутри QWidget другой формы. Полностью форма в QWidget не влазиет, и мне нужно чтобы она могла прокручивать своё содержимое. Ну что-то ни как не получается сладить с ней...
вот код:
C++ (Qt)
#ifndef EDITCONTACT_H
#define EDITCONTACT_H
#include <QScrollArea>
#include "pqsqlite.h"
namespace Ui {
class EditContact;
}
class EditContact : public QScrollArea
{
Q_OBJECT
public:
explicit EditContact(QWidget *parent = 0);
~EditContact();
void ViewContact(QHash<QString,QVariant> data);
private:
PQSQLite *_db;
int _contactID;
void _showChildren();
void _showNotes();
private slots:
void on_comboBox_LostFocus();
/** @brief метод вызывается при клике по полю имя,отчество
*/
void on_lineEditName_clicked();
/** @brief метод вызывается при потере фокуса у поля имя,отчество
*/
void on_lineEditName_lostFocus();
/** @brief метод вызывается при потере фокуса у поля фамилия
*/
void on_lineEditLastName_lostFocus();
/** @brief метод вызывается при клике по полю фамилия
*/
void on_lineEditLastName_clicked();
/** @brief метод вызывается при потере фокуса у поля email
*/
void on_lineEditEmail_lostFocus();
/** @brief метод вызывается при клике по полю email
*/
void on_lineEditEmail_clicked();
/** @brief метод вызывается при потере фокуса у поля мобильный
*/
void on_lineEditMobile_lostFocus();
/** @brief метод вызывается при клике по полю мобильный
*/
void on_lineEditMobile_clicked();
/** @brief метод вызывается при потере фокуса у поля компания
*/
void on_lineEditCompany_lostFocus();
/** @brief метод вызывается при клике по полю компания
*/
void on_lineEditCompany_clicked();
/** @brief метод вызывается при потере фокуса у поля домашний
*/
void on_lineEditHomePhone_lostFocus();
/** @brief метод вызывается при клике по полю компания
*/
void on_lineEditHomePhone_clicked();
private:
Ui::EditContact *ui;
};
#endif // EDITCONTACT_H
C++ (Qt)
#include <QFont>
#include "editcontact.h"
#include "ui_editcontact.h"
EditContact::EditContact(QWidget *parent) :
QScrollArea(parent),
ui(new Ui::EditContact)
{
ui->setupUi(this);
/// инициализируем свойства класса
_db = PQSQLite::GetInstance();
/// трюки с combobox
ui->labelCategory->hide();
ui->comboBox->addItem("gdfgsffg");
/// настроим некоторые виджеты
ui->lineEditMobile->setInputMask("+7 (999) 999-9999");
ui->lineEditHomePhone->setInputMask("2-99-99-99");
ui->tableWidgetChildren->setColumnCount(3);
ui->tableWidgetNotes->setColumnCount(3);
ui->tableWidgetChildren->hideColumn(0);
ui->tableWidgetNotes->hideColumn(0);
}
EditContact::~EditContact()
{
delete ui;
}
/// метод заполняющий форму данными полученного контакта
void EditContact::ViewContact(QHash<QString, QVariant> data){
_contactID = data["ID"].toInt();
ui->lineEditName->setText(data.value("name").toString());
ui->lineEditLastName->setText(data.value("lastName").toString());
ui->dateEditDay->setDate(data.value("birthday").toDate());
ui->lineEditEmail->setText(data.value("email").toString());
ui->lineEditCompany->setText(data.value("company").toString());
ui->lineEditHomePhone->setText(data.value("homePhone").toString());
ui->lineEditMobile->setText(data.value("mobile").toString());
this->_showChildren();
this->_showNotes();
if (!this->isVisible()) this->show();
}
void EditContact::_showChildren(){
QList<QHash<QString,QVariant> > list;
_db->selectFilter("children","contactID="+QString::number(_contactID),&list);
ui->tableWidgetChildren->clear();
ui->tableWidgetChildren->setRowCount(0);
int count = list.count();
for (int i=0; i<count; i++){
int row = ui->tableWidgetChildren->rowCount() + 1;
ui->tableWidgetChildren->setRowCount(row);
QHash<QString,QVariant> record = list.at(i);
QTableWidgetItem *itemID = new QTableWidgetItem(record.value("ID").toString());
ui->tableWidgetChildren->setItem(row-1,0,itemID);
QTableWidgetItem *itemName = new QTableWidgetItem(record.value("name").toString());
ui->tableWidgetChildren->setItem(row-1,1,itemName);
QTableWidgetItem *itemDay = new QTableWidgetItem(record.value("birthday").toString());
ui->tableWidgetChildren->setItem(row-1,2,itemDay);
}
ui->tableWidgetChildren->resizeRowsToContents();
ui->tableWidgetChildren->resizeColumnsToContents();
}
void EditContact::_showNotes(){
QList<QHash<QString,QVariant> > list;
_db->selectFilter("notesContact","contactID="+QString::number(_contactID),&list);
ui->tableWidgetNotes->clear();
ui->tableWidgetNotes->setRowCount(0);
int count = list.count();
for (int i=0; i<count; i++){
int row = ui->tableWidgetNotes->rowCount() + 1;
ui->tableWidgetNotes->setRowCount(row);
QHash<QString,QVariant> record = list.at(i);
QTableWidgetItem *itemID = new QTableWidgetItem(record.value("ID").toString());
ui->tableWidgetNotes->setItem(row-1,0,itemID);
QTableWidgetItem *itemTitle = new QTableWidgetItem(record.value("titleInform").toString());
QFont font("Times" , 9 , QFont ::Bold );
QBrush color (Qt::red);
itemTitle->setForeground(color);
itemTitle->setFont(font);
ui->tableWidgetNotes->setItem(row-1,1,itemTitle);
QTableWidgetItem *itemInform = new QTableWidgetItem(record.value("inform").toString());
ui->tableWidgetNotes->setItem(row-1,2,itemInform);
/// растянем расстояние между таблицей и последующими за ней элементами
ui->tableWidgetNotes->setRowHeight(row,20);
ui->pushButtonDelContact->setGeometry(ui->pushButtonDelContact->x(),ui->pushButtonDelContact->y()+20,ui->pushButtonDelContact->width(),ui->pushButtonDelContact->height());
ui->widget->setGeometry(ui->widget->x(),ui->widget->y()+20,ui->widget->width(),ui->widget->height());
ui->tableWidgetNotes->setGeometry(ui->tableWidgetNotes->x(), ui->tableWidgetNotes->y(),ui->tableWidgetNotes->width(),ui->tableWidgetNotes->height()+20);
}
ui->tableWidgetNotes->resizeRowsToContents();
ui->tableWidgetNotes->resizeColumnsToContents();
}
void EditContact::on_comboBox_LostFocus()
{
ui->comboBox->hide();
}
/// обрабатываем собития клика и потери фокуса для поля имя,отчество
void EditContact::on_lineEditName_lostFocus()
{
ui->lineEditName->setStyleSheet("background-color: rgba(255, 255, 255, 0);");
ui->lineEditName->setFrame(false);
ui->lineEditName->setReadOnly(true);
if (!ui->lineEditName->text().isEmpty())
_db->UpdateOneField("contacts","name",ui->lineEditName->text(),"ID="+QString::number(_contactID));
}
void EditContact::on_lineEditName_clicked()
{
ui->lineEditName->setStyleSheet("background-color: rgba(255, 255, 255, 255);");
ui->lineEditName->setFrame(true);
ui->lineEditName->setReadOnly(false);
}
/// обрабатываем собития клика и потери фокуса для поля фамилия
void EditContact::on_lineEditLastName_lostFocus()
{
ui->lineEditLastName->setStyleSheet("background-color: rgba(255, 255, 255, 0);");
ui->lineEditLastName->setFrame(false);
if (!ui->lineEditLastName->text().isEmpty())
_db->UpdateOneField("contacts","lastName",ui->lineEditLastName->text(),"ID="+QString::number(_contactID));
}
void EditContact::on_lineEditLastName_clicked()
{
ui->lineEditLastName->setStyleSheet("background-color: rgba(255, 255, 255, 255);");
ui->lineEditLastName->setFrame(true);
ui->lineEditLastName->setReadOnly(false);
}
/// обрабатываем собития клика и потери фокуса для поля email
void EditContact::on_lineEditEmail_lostFocus()
{
ui->lineEditEmail->setStyleSheet("background-color: rgba(255, 255, 255, 0);");
ui->lineEditEmail->setFrame(false);
ui->lineEditEmail->setReadOnly(true);
if (!ui->lineEditEmail->text().isEmpty())
_db->UpdateOneField("contacts","email",ui->lineEditEmail->text(),"ID="+QString::number(_contactID));
}
void EditContact::on_lineEditEmail_clicked()
{
ui->lineEditEmail->setStyleSheet("background-color: rgba(255, 255, 255, 255);");
ui->lineEditEmail->setFrame(true);
ui->lineEditEmail->setReadOnly(false);
}
/// обрабатываем собития клика и потери фокуса для поля мобильный
void EditContact::on_lineEditMobile_lostFocus()
{
ui->lineEditMobile->setStyleSheet("background-color: rgba(255, 255, 255, 0);");
ui->lineEditMobile->setFrame(false);
ui->lineEditMobile->setReadOnly(true);
if (!ui->lineEditMobile->text().isEmpty())
_db->UpdateOneField("contacts","mobile",ui->lineEditMobile->text(),"ID="+QString::number(_contactID));
}
void EditContact::on_lineEditMobile_clicked()
{
ui->lineEditMobile->setStyleSheet("background-color: rgba(255, 255, 255, 255);");
ui->lineEditMobile->setFrame(true);
}
/// обрабатываем собития клика и потери фокуса для поля компания
void EditContact::on_lineEditCompany_lostFocus()
{
ui->lineEditCompany->setStyleSheet("background-color: rgba(255, 255, 255, 0);");
ui->lineEditCompany->setFrame(false);
ui->lineEditCompany->setReadOnly(true);
if (!ui->lineEditCompany->text().isEmpty())
_db->UpdateOneField("contacts","company",ui->lineEditCompany->text(),"ID="+QString::number(_contactID));
}
void EditContact::on_lineEditCompany_clicked()
{
ui->lineEditCompany->setStyleSheet("background-color: rgba(255, 255, 255, 255);");
ui->lineEditCompany->setFrame(true);
ui->lineEditCompany->setReadOnly(false);
}
/// обрабатываем собития клика и потери фокуса для поля Домашний
void EditContact::on_lineEditHomePhone_lostFocus()
{
ui->lineEditHomePhone->setStyleSheet("background-color: rgba(255, 255, 255, 0);");
ui->lineEditHomePhone->setFrame(false);
ui->lineEditHomePhone->setReadOnly(true);
if (!ui->lineEditHomePhone->text().isEmpty())
_db->UpdateOneField("contacts","homePhone",ui->lineEditHomePhone->text(),"ID="+QString::number(_contactID));
}
void EditContact::on_lineEditHomePhone_clicked()
{
ui->lineEditHomePhone->setStyleSheet("background-color: rgba(255, 255, 255, 255);");
ui->lineEditHomePhone->setFrame(true);
ui->lineEditHomePhone->setReadOnly(false);
}
вот вызываю в другой форме:
/// отображение данных по контакту
_viewContact = new EditContact(ui->widget_2);
_viewContact->show();